PHP 4 (PHP 3 ne) vsebuje foreach stavek, tako kot Perl in nekateri drugi programski jeziki. To vam ponuja enostaven sprehod cez kjluče in vrednosti v polju. foreach deluje samo na poljih in če jo poskusite uporabiti na spremenljivki drugačnega tipa, ali na neinicializirani spremenljivki, bo izpisalo napako. Obstajata dve sintaksi; slednja je manjša a uporabna razširitev prve:
foreach(array_expression as $vrednost) stavek foreach(array_expression as $kljuc => $vrednost) stavek |
Prva oblika sintakse se sprehodi preko polja podanega z array_expression. Ob vsaki zanki je vrednost trenutnega elementa dodeljena spremenljivki $vrednost in interni kazalec na element v polju se poveča za ena (tako da boste ob naslednji zanki dobili naslednji element v polju).
Druga oblike sintakse naredi isto stvar, le da poleg vrednosti dobite tudi ključ elementa v polju, katerega vrednost se dodeli spremenljivki kljuc.
Opomba: Ko se foreach prvič izvede, se interni kazalec na element v polju nastavi na prvi element v polju. To pomeni, da vam ni potrebno vsakič klicati reset() funkcije pred začetkom foreach zanke.
Opomba: Pomnite tudi, da foreach operira na kopiji podanega polja in ne na polju samem. Kar pomeni, da kazalec na element v polju ni spremenjen, kot se to zgodi pri each() stavku in spremembe v elementu polja ne vplivajo na vrednost originalnega polja.
Opomba: foreach ne podpira '@', ki preprečuje izpis napak.
Verjetno ste opazili, da so naslednji primeri funkcionalno enaki:
reset ($arr); while (list(, $vrednost) = each ($arr)) { echo "Vrednost: $vrednost<br>\n"; } foreach ($arr as $vrednost) { echo "Vrednost: $vrednost<br>\n"; } |
reset ($arr); while (list($kljuc, $vrednost) = each ($arr)) { echo "Kljuc: $kljuc; Vrednost: $vrednost<br>\n"; } foreach ($arr as $kljuc => $vrednost) { echo "Kljuc: $kljuc; Vrednost: $vrednost<br>\n"; } |
Še nekaj primerov uporabe:
/* foreach primer 1: samo vrednosti */ $a = array (1, 2, 3, 17); foreach ($a as $v) { print "Trenutna vrednost \$a: $v.\n"; } /* foreach primer 2: vrednost (s kljucem kot ilustracija) */ $a = array (1, 2, 3, 17); $i = 0; /* samo za ilustracijo */ foreach($a as $v) { print "\$a[$i] => $v.\n"; $i++; } /* foreach primer 3: kljuc in vrednost */ $a = array ( "ena" => 1, "dva" => 2, "tri" => 3, "sedemnajst" => 17 ); foreach($a as $k => $v) { print "\$a[$k] => $v.\n"; } /* foreach primer 4: vec-dimenzionalno polje */ $a[0][0] = "a"; $a[0][1] = "b"; $a[1][0] = "y"; $a[1][1] = "z"; foreach($a as $v1) { foreach ($v1 as $v2) { print "$v2\n"; } } /* foreach primer 5: dinamicna polja */ foreach(array(1, 2, 3, 4, 5) as $v) { print "$v\n"; } |