Цикл foreach в PHP для индексных массивов
Когда нужно перебрать каждый элемент массива или каждое свойство объекта, естественный выбор — foreach. Счётчик не нужен, потому что PHP сам следит за текущей позицией.
На каждом проходе значение текущего элемента помещается в указанную вами переменную, здесь это $value. Цикл завершается после обработки последнего элемента.
Перебор индексного массива
Выведите каждый элемент индексного массива $colors:
Вывод: PHP-скрипт
<?php
$colors = array("red", "green", "blue", "yellow");
foreach ($colors as $value) {
echo "$value <br>";
}
?>
Цикл foreach в PHP для ассоциативных массивов
Элементы ассоциативного массива имеют именованные ключи, и часто вместе со значением вам нужен и ключ. Чтобы получить и то и другое, запишите их в заголовке foreach в виде $key => $value.
Перебор ассоциативного массива
Выводятся имя (ключ) и возраст (значение) каждого участника из $members:
Вывод: PHP-скрипт
<?php
$members = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");
foreach ($members as $key => $value) {
echo "$key : $value <br>";
}
?>
Цикл foreach в PHP для объектов
С foreach работают и объекты: цикл перебирает их свойства по одному.
Перебор свойств объекта
Здесь имя каждого свойства объекта $myCar выводится рядом с его значением:
Вывод: PHP-скрипт
<?php
class Car {
public $color;
public $model;
public function __construct($color, $model) {
$this->color = $color;
$this->model = $model;
}
}
$myCar = new Car("red", "Volvo");
foreach ($myCar as $x => $y) {
echo "$x: $y <br>";
}
?>
Оператор break в PHP
Не обязательно проходить массив до конца. Оператор break завершает цикл до того, как он дойдёт до последнего элемента.
Остановка цикла с помощью break
Цикл завершается, когда $x содержит "blue", поэтому выводятся только цвета, идущие перед ним:
Вывод: PHP-скрипт
<?php
$colors = array("red", "green", "blue", "yellow");
foreach ($colors as $x) {
if ($x == "blue") break;
echo "$x <br>";
}
?>
Оператор continue в PHP
Используйте continue, чтобы пропустить элемент, не завершая цикл. Оставшаяся часть этой итерации отбрасывается, и наступает очередь следующего элемента.
Пропуск итерации с помощью continue
Когда $x содержит "blue", echo пропускается, поэтому выводятся остальные три цвета:
Вывод: PHP-скрипт
<?php
$colors = array("red", "green", "blue", "yellow");
foreach ($colors as $x) {
if ($x == "blue") continue;
echo "$x <br>";
}
?>
Цикл foreach в PHP по ссылке
Обычно переменная цикла содержит копию каждого элемента, поэтому присваивание ей нового значения не затрагивает исходный массив.
Чтобы изменить сам массив, поставьте символ & перед переменной в объявлении foreach. Тогда переменная становится ссылкой на элемент массива, и всё, что вы ей присваиваете, попадает в исходный массив.
Foreach без ссылки
Цикл присваивает $x значение «pink», когда находит «blue», но var_dump() показывает, что $colors не изменился:
Вывод: PHP-скрипт
<?php
$colors = array("red", "green", "blue", "yellow");
foreach ($colors as $x) {
if ($x == "blue") $x = "pink";
}
var_dump($colors);
?>
Foreach со ссылкой
С &$x то же самое присваивание действительно доходит до массива, и «blue» заменяется на «pink»:
Вывод: PHP-скрипт
<?php
$colors = array("red", "green", "blue", "yellow");
foreach ($colors as &$x) {
if ($x == "blue") $x = "pink";
}
var_dump($colors);
?>
Альтернативный синтаксис
Цикл foreach можно записать и вторым способом: заменить фигурные скобки двоеточием и закрыть цикл с помощью endforeach.
Foreach с endforeach
Снова индексный массив $colors, на этот раз выведенный в форме с endforeach:
Вывод: PHP-скрипт
<?php
$colors = array("red", "green", "blue", "yellow");
foreach ($colors as $x) :
echo "$x <br>";
endforeach;
?>