Gå til innhold

Få løkke til å vise visse ting fra dobbel-array


Anbefalte innlegg

Jeg har for ikke så lenge siden begynt å lære PHP. Jeg har satt opp et (alt for) enkelt utkast til en slags albumliste, og jeg ønsker å kun vise albumene fra et visst årstall. Forståelsen min for løkker er svært dårlig, men jeg mener å være på riktig vei.

 

URL: http://www.stud.hig.no/~080521/php/albumliste_test.php (Skolens server takler ikke utf-8)

 

Kode:

 

<link rel="stylesheet" href="http://www.stud.hig.no/~080521/stil.css" type ="text/css" />
<h1>Albumliste</h1>

<?php
$etalbum = array("artist" => "Solar Fields", "tittel" => "Leaving Home", "aar" => "2005");
$album[] = $etalbum;

echo "<p>Albumet " . $etalbum["tittel"] . " (" . $etalbum["aar"] . ") er lagd av " . $etalbum["artist"] . "</p>\n";

$etalbum = array("artist" => "Secede", "tittel" => "Tryshasla", "aar" => "2005");
$album[] = $etalbum;

echo "<p>Albumet " . $etalbum["tittel"] . " (" . $etalbum["aar"] . ") er lagd av " . $etalbum["artist"] . "</p>\n";

$etalbum = array("artist" => "Biosphere", "tittel" => "Substrata", "aar" => "1997");
$album[] = $etalbum;

echo "<p>Albumet " . $etalbum["tittel"] . " (" . $etalbum["aar"] . ") er lagd av " . $etalbum["artist"] . "</p>\n";

echo "Prøve å skrive ut alle album fra 2005, dvs de to første:\n";

for ($i=1; $i<count($album); $i++){
if ($album["aar"] == "2005") {
	echo $album . " er lagd i 2005";
}
}

?>

 

Mulig jeg ikke har anvendt helt optimale løsninger, men det hadde vært fint hvis ikke for avansert kode brukes, ettersom jeg som sagt er på nybegynnerstadiet. På forhånd takk :)

Lenke til kommentar
Videoannonse
Annonse

Kan ikke teste her, men prøv noe slikt

 

for ($i=0; $i<count($album); $i++){

$albumet_vi_sjekker= $album[$i]:

if ($albumet_vi_sjekker["aar"] == "2005") {

echo $albumet_vi_sjekker["tittel"] . " er lagd i 2005";

}

}

 

 

Prøv forresten også

 

print_r($album);

 

for bedre oversikt

Endret av Ekko
Lenke til kommentar

Du bør omdøpe $album til $albumListe og $etalbum til $album.

 

Du kan loope slik:

 

$aar = 2005;
foreach ($albumListe as $album) {
if ($album['arr'] === $aar)
	printf('%s er laget i år %d', $album["tittel"], $album["aar"]);
}

 

Husk at arrays starter på nøkkel 0 og ikke 1.

Og skal du skrive en for loop for et array som ikke endrer størrelse mens du looper det, er det best å telle antall en gang før du looper istedenfor ved hver evaluering at $i ikke er for stor.

// ikke slik:
// for ($i=1; $i<count($album); $i++)
// men slik:
for ($i = 0, $t = count($albumListe); $i < $t; $i++)

 

Og skal du bruke echo er det gjerne bedre å bruke parameter istedenfor streng sammenslåing.

//echo "<p>Albumet " . $etalbum["tittel"] . " (" . $etalbum["aar"] . ") er lagd av " . $etalbum["artist"] . "</p>\n";
echo "<p>Albumet ", $album["tittel"], " (", $album["aar"], ") er lagd av ", $album["artist"], "</p>\n";
//eller
printf("<p>Albumet %s  (%d) er lagd av %s</p>\n",  $album["tittel"], $album["aar"], $album["artist"]);

Lenke til kommentar

Takk for gode svar, skal se om jeg får det til og skjønner det nå :)

 

Ekko: Forslaget ditt funka kjempefint. Fint å se at jeg ikke var så langt unna.

 

OIS: Skal se på forbedringsforslagene dine etter hvert.

Endret av Rognalf
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...