foreach
foreach
В PHP 4 (не в PHP 3) имеется конструкция foreach, напоминающая аналоги из Perl и некоторых других языков. Она даёт простой способ итерировать по массиву. Есть два вида синтаксиса: второй является расширением первого и используется реже:
foreach(array_expression as $value) statement foreach(array_expression as $key => $value) statement |
Первый вид циклически проходит по массиву, заданному в array_expression. При каждом проходе значение текущего элемента присваивается переменной $value, а внутренний указатель массива передвигается на единицу (поэтому при следующем проходе вы просмотрите значение следующего элемента).
Второй вид выполняет то же самое, но ключ/key текущего элемента присваивается переменной $key.
Примечание: при старте foreach внутренний указатель массива автоматически устанавливается на первый элемент массива. Это означает, что вам не нужно вызывать reset() перед началом выполнения цикла foreach.
Примечание: обратите также внимание, что foreach работает с копией специфицированного массива, а не с самим массивом, следовательно, указатель массива не изменяется, как при работе конструкции each(), и изменения в возвращаемом элементе массива не влияют на массив-оригинал.
Примечание: foreach не поддерживает возможность подавления сообщений об ошибках с использованием '@'.
Заметьте, что следующие варианты функционально идентичны:
reset ($arr); while (list(, $value) = each ($arr)) { echo "Value: $value<br>\n"; } foreach ($arr as $value) { echo "Value: $value<br>\n"; } |
Следующие варианты также функционально идентичны:
reset ($arr); while (list($key, $value) = each ($arr)) { echo "Key: $key; Value: $value<br>\n"; } foreach ($arr as $key => $value) { echo "Key: $key; Value: $value<br>\n"; } |
Ещё несколько примеров использования:
/* foreach пример 1: только value */ $a = array (1, 2, 3, 17); foreach ($a as $v) { print "Current value of \$a: $v.\n"; } /* foreach пример 2: value (с key, выводимым для иллюстрации) */ $a = array (1, 2, 3, 17); $i = 0; /* только для иллюстрации */ foreach($a as $v) { print "\$a[$i] => $v.\n"; $i++; } /* foreach пример 3: key\ключ и value\значение */ $a = array ( "one" => 1, "two" => 2, "three" => 3, "seventeen" => 17 ); foreach($a as $k => $v) { print "\$a[$k] => $v.\n"; } /* foreach пример 4: многомерные массивы */ $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 пример 5: динамические массивы */ foreach(array(1, 2, 3, 4, 5) as $v) { print "$v\n"; } |