Цикл foreach предоставляет простой способ перебора массивов. Foreach работает только с массивами и объектами, и будет генерировать ошибку при попытке использования с переменными других типов или неинициализированными переменными.
Первый вид синтаксиса цикла foreach:
foreach ($array as $value) { инструкции }
Цикл foreach будет перебирать заданный массив — $array . На каждой итерации значение текущего элемента присваивается переменной $value.
Цикл foreach выполняет обход и чтение всех элементов массива, пока не будет достигнут последний.
Пример использования:
$masiv = array(1, 2, 3, 4, 5); foreach ($masiv as $i) { echo $i; }
12345
Второй вид синтаксиса foreach:
foreach ($array as $key => $value) { инструкции }
Теперь при использовании второго вида синтаксиса на каждой итерации дополнительно присваивается значение текущего ключа переменной $key.
Пример использования:
$masiv = array(1, 2, 3, 4, 5); foreach ($masiv as $key => $i) { echo "[$key] = ", $i, "<br>"; }
[0] = 1
[1] = 2
[2] = 3
[3] = 4
[4] = 5
Так же имеется возможность обхода массива массивов с распаковкой вложенного массива в переменные цикла, передав list() в качестве значения.
Пример:
$masiv = array([1, 2],[3, 4]); foreach ($masiv as list($a, $b)) { echo "A: $a; B: $b <br>";
A: 1; B: 2
A: 3; B: 4
Для того, чтобы напрямую изменять элементы массива внутри цикла, переменной $value должен предшествовать знак &. В этом случае значение будет присвоено по ссылке.
$masiv = array(1, 2, 3, 4, 5); foreach ($masiv as &$i) { $i = $i*10; // массив $i сейчас таков: array(10, 20, 30, 40, 50) echo $i; unset($i); // разорвать ссылку на последний элемент }
1020304050
Ссылка на последний элемент массива остается даже после того, как оператор foreach завершил работу. Поэтому рекомендуется удалять ее с помощью функции unset().