Forum und email

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 át

<?php
$arr 
= array(1234);
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ó).

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";
}
?>
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(12317);

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(12317);

$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(12345) as $ertek) {
    echo 
"$ertek\n";
}
?>