W3docs

foreach

Ключевое слово foreach — конструкция цикла в PHP для перебора массивов и объектов. Синтаксис и примеры использования.

Цикл foreach в PHP

foreach — это специализированный цикл PHP для перебора массивов и объектов. В отличие от цикла for, он не требует счётчика или индекса — он автоматически проходит по каждому элементу по одному, что делает его наиболее распространённым и надёжным способом обработки коллекций в PHP.

В этой главе рассматриваются две формы foreach, перебор по ссылке, распаковка вложенных массивов с помощью list(), наиболее распространённая ловушка и случаи, когда стоит использовать foreach вместо других циклов PHP.

Синтаксис

foreach имеет две формы.

Только значение — когда вас интересует лишь значение каждого элемента:

foreach ($array as $value) {
  // do something with $value
}

Ключ и значение — когда нужен и ключ массива (обязательно для ассоциативных массивов):

foreach ($array as $key => $value) {
  // do something with $key and $value
}

На каждом проходе PHP копирует текущий элемент в $value (и его ключ в $key), затем переходит к следующему элементу, пока массив не будет исчерпан.

Перебор индексированного массива

php— editable, runs on the server

Перебор ассоциативного массива

С формой $key => $value вы получаете обе части каждой пары:

<?php

$person = ["name" => "John", "age" => 30, "city" => "New York"];

foreach ($person as $key => $value) {
  echo $key . ": " . $value . PHP_EOL;
}

// Output:
// name: John
// age: 30
// city: New York

Изменение значений по ссылке

По умолчанию $value является копией, поэтому изменение его внутри цикла не влияет на исходный массив. Добавьте перед ним &, чтобы перебирать по ссылке и записывать изменения обратно:

<?php

$prices = [10, 20, 30];

foreach ($prices as &$price) {
  $price *= 2;          // modifies the array in place
}
unset($price);          // important: break the reference

print_r($prices);

// Output:
// Array
// (
//     [0] => 20
//     [1] => 40
//     [2] => 60
// )

Внимание: всегда выполняйте unset($price) после цикла по ссылке. Переменная по-прежнему указывает на последний элемент, поэтому последующее присвоение значения $price — или второй foreach, повторно использующий это имя, — незаметно испортит массив.

Распаковка вложенных массивов с помощью list()

Когда каждый элемент сам является массивом, его можно деструктурировать прямо в цикле с помощью list() (или сокращённого синтаксиса [] в PHP 7.1+):

<?php

$points = [[1, 2], [3, 4], [5, 6]];

foreach ($points as [$x, $y]) {
  echo "x=$x, y=$y" . PHP_EOL;
}

// Output:
// x=1, y=2
// x=3, y=4
// x=5, y=6

Когда использовать foreach

  • Используйте foreach для любого массива или итерируемого объекта, когда нужны все элементы — это самый понятный выбор, который не может выйти за пределы массива.
  • Используйте цикл for, когда нужен точный контроль над счётчиком (пропуск элементов, шаг 2, обратный отсчёт).
  • Используйте while, когда количество итераций заранее неизвестно и зависит от условия.

Вы также можете выйти из foreach досрочно с помощью break или пропустить итерацию с помощью continue, точно так же, как в других циклах.

Практика

Практика
Какова основная цель цикла foreach в PHP согласно https://www.w3docs.com/learn-php/foreach.html?
Какова основная цель цикла foreach в PHP согласно https://www.w3docs.com/learn-php/foreach.html?
Was this page helpful?