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";
} |