PHP kézikönyv
Előző | 16. Fejezet. Vezérlési szerkezetek | Következő

# foreach

A PHP 4-től a Perlhez és más nyelvekhez hasonlóan létezik az ún. foreach szerkezet is. Ez jól használható eszközt ad a tömbökön végzett iterációkhoz. Más típusú vagy inicializálatlan változóra nem lehet használni, azokra hibát jelez. Két szintaxisa létezik, a második egy apró, de hasznos kiegészítéssel nyújt többet az elsőhöz képest.

    foreach (tömb_kifejezés as $ertek)
        utasítás
    foreach (tömb_kifejezés as $kulcs => $ertek)
        utasítás

Az első forma végigmegy a tömb_kifejezés szolgáltatta tömbön. Minden alkalommal az aktuális elem értéke a $ertek változóba kerül, és a belső tömb mutató növelésre kerül. (A következő alkalommal tehát a soron következő elemet fogja venni).

A második forma ugyanezt végzi el, de az aktuális elem kulcsa a $kulcs változóba kerül.

A PHP 5-től kezdődően lehetséges az obejktumokon való iteráció is.

> Megjegyzés: Amikor a foreach indul, a belső tömb mutató az első elemre áll. Ez azt jelenti, hogy nem kell meghívni a reset() függvényt egy foreach ciklus előtt.

> Megjegyzés: Hacsak nem referenciaként adjuk meg az átnyálazandó tömböt, a foreach függvény a megadott tömb egy másolatával dolgozik és nem magával a tömbbel. Ezért az each()-el ellentétben az eredeti tömb mutatója nem változik meg, és a tömbön végzett módosítások sem kerülnek be az eredeti tömbbe. Azonban az eredeti tömb belső mutatója növelésre kerül a tömb feldolgozása során. Feltéve ha a foreach ciklus végig lefut, a tömb belső mutatója a tömb végén lesz.

> A PHP 5-ös verziójától könnyedén megváltoztathatod a tömb elemeit, úgy hogy az $ertek elé egy & jelet írsz. Ez ahelyett hogy átmásolná az értéket, referenciaként adja át

> `<?php $arr = array(1, 2, 3, 4); foreach ($arr as &$ertek) { $ertek = $ertek * 2; } // az $arr most array(2, 4, 6, 8) ?>`

> Ez csak akkor lehetséges, ha a végigjárt tömb hivatkozható (azaz változó).

> Megjegyzés: A foreach nem támogatja a @ hiba-elnyelő operátor használatát!

Talán már tudod, hogy az alábbi példák egyenértékűek:

`<?php $arr = array("egy", "kettő", "három"); reset($tomb); while (list(, $ertek) = each($tomb)) { echo "Érték: $ertek<br />\n"; } foreach ($tomb as $ertek) { echo "Érték: $ertek<br />\n"; } ?>`

Az alábbiak is azonos eredményt szolgáltatnak:

`<?php $arr = array("egy", "kettő", "három"); reset($tomb); while (list($kulcs, $ertek) = each($tomb)) { echo "Kulcs: $kulcs, Érték: $ertek<br />\n"; } foreach ($tomb as $kulcs => $ertek) { echo "Kulcs: $kulcs, Érték: $ertek<br />\n"; } ?>`

Néhány további felhasználási példa:

`<?php /* első foreach példa: csak érték */ $tomb = array(1, 2, 3, 17); foreach ($tomb as $ertek) { echo "Az aktuális értéke \$tomb-nek: $ertek.\n"; } /* második foreach példa: érték (a kulcs csak illusztráció) */ $tomb = array(1, 2, 3, 17); $i = 0; /* csak pedagógiai okokból :) */ foreach ($tomb as $ertek) { echo "\$tomb[$i] => $ertek.\n"; $i++; } /* harmadik foreach példa: kulcs és érték */ $a = array( "egy" => 1, "kettő" => 2, "három" => 3, "tizenhét" => 17 ); foreach ($tomb as $kulcs => $ertek) { echo "\$tomb[$kulcs] => $ertek.\n"; } /* negyedik foreach példa: többdimenziós tömb */ $a = array(); $tomb[0][0] = "a"; $tomb[0][1] = "b"; $tomb[1][0] = "y"; $tomb[1][1] = "z"; foreach ($tomb as $belsotomb) { foreach ($belsotomb as $ertek) { echo "$ertek\n"; } } /* ötödik foreach példa: dinamikus tömbök */ foreach (array(1, 2, 3, 4, 5) as $ertek) { echo "$ertek\n"; } ?>`

Előző | Tartalom | Következő
for | Fel | break