Rognalf Skrevet 23. mars 2009 Del Skrevet 23. mars 2009 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
Ekko Skrevet 23. mars 2009 Del Skrevet 23. mars 2009 (endret) 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 23. mars 2009 av Ekko Lenke til kommentar
OIS Skrevet 23. mars 2009 Del Skrevet 23. mars 2009 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
Rognalf Skrevet 23. mars 2009 Forfatter Del Skrevet 23. mars 2009 (endret) 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 24. mars 2009 av Rognalf Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå