Контролни структури
PHP Manual

foreach

В PHP 4 беше въведена конструкция foreach (за всеки), много наподобяваща тази в Perl и в някои други езици. Тя предоставя лесен начин за обхождане на масиви. foreach работи само с масиви и ще изведе грешка, ако се опитате да я използвате върху променлива от друг тип или върху неинициализирана променлива. Съществуват два синтаксиса; вторият е минимално, но полезно разширение на първия:

foreach (array_expression as $value)
statement
foreach (array_expression as $key => $value)
statement

Първата форма обикаля през зададения от array_expression масив. При всяка итерация стойността на текущия елемент се присвоява на $value и вътрешният указател на масива се придвижва с единица (така че при следващата итерация, ще гледате следващия елемент).

Втората форма прави същото нещо, с тази разлика, че ключът на текущия елемент ще бъде присвоен на променливата $key при всяка итерация.

След PHP 5 е възможно също да обхождате и обекти.

Забележка: Когато foreach започва първоначалното си изпълнение, вътрешният указател на масива автоматично се нулира, така че да сочи към първия елемент на масива. Това означава, че няма нужда да извиквате reset() преди цикъл foreach.

Забележка: С изключение на случаите, в които масивът е указан с референция, foreach ще работи с копие от зададения масив, а не със самия масив. foreach има някои странични ефекти върху указателя на масива. Не разчитайте на указателя на масива по време или след изпълнението на foreach без да сте го изчистили изрично.

От PHP 5 нататък лесно можете да променяте елементите на даден масив като предшествате $value с &. Това ще присвои по референция, вместо да копира стойността.

<?php
$arr 
= array(1234);
foreach (
$arr as &$value) {
    
$value $value 2;
}
// в този момент $arr е array(2, 4, 6, 8)
unset($value); // премахване референцията към последния елемент
?>

Това е възможно единствено, в случай че обхожданият масив може да бъде указван с референция (т.е. ако е променлива).

Предупреждение

Референцията между $value и последния елемент от масива остава дори и след приключването на цикъла foreach. Препоръчително е да я унищожите посредством unset().

Забележка: foreach не поддържа възможността за подтискане на съобщения за грешка чрез използване на '@'.

Може би сте забелязали, че следните примери са функционално идентични:

<?php
$arr 
= array("едно""две""три");
reset ($arr);
while (list(, 
$value) = each ($arr)) {
    echo 
"Стойност: $value<br />\n";
}

foreach (
$arr as $value) {
    echo 
"Стойност: $value<br />\n";
}
?>

Следните примери са също функционално идентични:

<?php
$arr 
= array("едно""две""три");
reset($arr);
while (list(
$key$value) = each ($arr)) {
    echo 
"Ключ: $key; Стойност: $value<br />\n";
}

foreach (
$arr as $key => $value) {
    echo 
"Ключ: $key; Стойност: $value<br />\n";
}
?>

Още няколко примера за демонстриране на употребата:

<?php
/* foreach пример 1: само стойност */

$a = array(12317);

foreach (
$a as $v) {
    echo 
"Текущата стойност на \$a: $v.\n";
}

/* foreach пример 2: value (нагледно, с отпечатване на ръчната нотация) */

$a = array(12317);

$i 0/* само за нагледни цели */

foreach ($a as $v) {
    echo 
"\$a[$i] => $v.\n";
    
$i++;
}

/* foreach пример 3: ключ и стойност */

$a = array(
    
"едно" => 1,
    
"две" => 2,
    
"три" => 3,
    
"седемнадесет" => 17
);

foreach (
$a as $k => $v) {
    echo 
"\$a[$k] => $v.\n";
}

/* foreach пример 4: многомерни масиви */
$a = array();
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";

foreach (
$a as $v1) {
    foreach (
$v1 as $v2) {
        echo 
"$v2\n";
    }
}

/* foreach пример 5: динамични масиви */

foreach (array(12345) as $v) {
    echo 
"$v\n";
}
?>


Контролни структури
PHP Manual