foreach

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

Tudi naslednji primeri so funkcionalno enaki:

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