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.
Note: 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.
Note: 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 átEz csak akkor lehetséges, ha a végigjárt tömb hivatkozható (azaz változó).<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$ertek) {
$ertek = $ertek * 2;
}
// az $arr most array(2, 4, 6, 8)
?>
Note: 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";
}
?>
<?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";
}
?>