Цикл FOREACH в PHP | Перебор элементов массива

Синтаксис цикла FOREACH

С помощью цикла FOREACH мы можем перебрать все элементы массива и выполнить для них (или только для некоторых из них) какие-либо действия.

Например, так будет выглядеть вывод названий всех товаров:

<?php
    $products[] = ['name' => 'Товар1', 'price' => 1000];
    $products[] = ['name' => 'Товар2', 'price' => 2000];
    $products[] = ['name' => 'Товар3', 'price' => 3000];
    $products[] = ['name' => 'Товар4', 'price' => 4000];
    foreach($products as $product)
        echo $product['name'] . '<br>';

Результат в браузере:

Товар1
Товар2
Товар3
Товар4

Всего 2 строчки кода для вывода всех элементов! А теперь разберёмся, как это работает.

Принцип работы цикла FOREACH

Возьмём следующий пример:

<?php
    $arr = [5, 10, 15];
    foreach($arr as $value)
        echo $value;

Когда мы запускаем цикл, PHP берёт первое значение массива 5 и помещает его в переменную $value. Затем один раз выполняется блок кода echo $value;. Затем PHP делает тоже самое со вторым значением, третьим и т.д.

Получается, команды, принадлежащие циклу FOREACH, будут запущены для каждого элемента отдельно.

Для добавления нескольких команд нужно поместить их в фигурные скобки. Попробуем вывести названия товаров, цена которых выше 1000:

<?php
    $products[] = ['name' => 'Товар1', 'price' => 1000];
    $products[] = ['name' => 'Товар2', 'price' => 2000];
    $products[] = ['name' => 'Товар3', 'price' => 3000];
    foreach($products as $product)
	{
		if($product['price'] > 1000)
			echo $product['name'] . '<br>';
	}

Результат в браузере:

Товар2
Товар3

Получение доступа к ключам массива выглядит следующим образом:

<?php
    $arr = [10, 15, 20];
    foreach($arr as $key => $value)
        echo $key, ' ', $value, '<br>';
?>

Результат в браузере:

0 10
1 15
2 20

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

Создадим обычный двумерный массив:

<?php
$arr['title1'] = [5, 10, 15];
$arr['title2'] = [48, 12, 0];
$arr['title3'] = [17, 24, 1280];

Если нужно перебрать элементы только одного подмассива, мы можем сделать так:

foreach($arr['title3'] as $value)
    echo $value, '<br>';

Если требуется вывести все подмассивы, мы можем использовать два цикла foreach, один внутри другого:

<?php
$arr['title1'] = [5, 10, 15];
$arr['title2'] = [48, 12, 0];
$arr['title3'] = [17, 24, 1280];
foreach($arr as $title => $values)
{
	echo 'Title: ', $title, '<br>';
	foreach($values as $value)
		echo 'Value: ', $value, '<br>';
	echo '<br>';
}

Результат в браузере:

Title: title1
Value: 5
Value: 10
Value: 15
Title: title2
Value: 48
Value: 12
Value: 0
Title: title3
Value: 17
Value: 24
Value: 1280

Задача №1

1. Создайте массив $arr и заполните его тремя значениями.

2. С помощью цикла foreach выведите все ключи и значения этого массива. Между ключом и значением должна быть строка -> , а между элементами — перенос строки (тег <br>).

<?php
$arr = ['Перебор', 'одномерного', 'массива'];
foreach($arr as $k => $v)
	echo $k, ' -> ', $v, '<br>';

Задача 2

Дан массив:

<?php
$arr[] = [1, 2, 3];
$arr[] = [4, 5, 6];
$arr[] = [7, 8, 9];

Выведите ключ и набор значений для каждого элемента верхнего уровня. Т.е. в браузере должно отобразиться следующее:

Ключ: 0 | Значения: 1, 2, 3
Ключ: 1 | Значения: 4, 5, 6
Ключ: 2 | Значения: 7, 8, 9

Важно: между значениями должны быть запятые, но перед первым и после последнего их быть не должно. 1,2,3 правильно, 1,2,3, не правильно.

<?php
$arr[] = [1, 2, 3];
$arr[] = [4, 5, 6];
$arr[] = [7, 8, 9];
foreach($arr as $k => $values) {
	echo 'Ключ: ' . $k . ' | Значения: ';
	echo implode(', ', $values) .
'<br>'; }

foreach | Руководство по PHP

Вернуться к: Управляющие конструкции

(PHP 4, PHP 5, PHP 7)

Конструкция foreach предоставляет простой способ перебора массивов. Foreach работает только с массивами и объектами, и будет генерировать ошибку при попытке использования с переменными других типов или неинициализированными переменными. Существует два вида синтаксиса:

Первый цикл перебирает массив, задаваемый с помощью array_expression

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

Второй цикл будет дополнительно соотносить ключ текущего элемента с переменной $key на каждой итерации.

Возможно настроить итераторы объектов.

Замечание:

Когда оператор foreach начинает исполнение, внутренний указатель массива автоматически устанавливается на первый его элемент Это означает, что нет необходимости вызывать функцию reset() перед использованием цикла foreach

.

Так как оператор foreach опирается на внутренний указатель массива, его изменение внутри цикла может привести к непредсказуемому поведению.

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

Указатель на $value возможен, только если на перебираемый массив можно ссылаться (т.е. если он является переменной). Следующий код не будет работать:

Внимание

Ссылка $value на последний элемент массива остается даже после того, как оператор foreach завершил работу. Рекомендуется уничтожить ее с помощью функции unset().

Замечание:

Оператор foreach не поддерживает возможность подавления сообщений об ошибках с помощью префикса ‘@’.

Вы могли заметить, что следующие конструкции функционально идентичны:

Следующие конструкции также функционально идентичны:

Вот еще несколько примеров, демонстрирующие использование оператора:

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

(PHP 5 >= 5.

5.0, PHP 7)

В PHP 5.5 была добавлена возможность обхода массива массивов с распаковкой вложенного массива в переменные цикла, передав list() в качестве значения.

Например:

Можно передавать меньшее количество элементов в list(), чем находится во вложенном массиве, в этом случае оставшиеся значения массива будут проигнорированы:

Если массив содержит недостаточно элементов для заполнения всех переменных из list(), то будет сгенерировано замечание об ошибке:

Вернуться к: Управляющие конструкции

Как использовать циклы foreach в PHP

В этом руководстве мы обсудим, как использовать и писать цикл foreach в PHP.

Цикл foreach в PHP идеально подходит для перебора элементов, являющихся частью индексированного массива или ассоциативного массива. Цикл начнется с первого элемента массива и будет проходить по всем элементам по порядку, пока не достигнет конца. Вы также можете перебирать объекты.

Есть несколько причин, по которым вы можете выбрать цикл foreach вместо обычного цикла for. Например, цикл foreach может быть немного проще для чтения и понимания при работе с массивами. Вы также можете избежать использования count() функция. Но, конечно, есть много других причин, по которым вы можете предпочесть одно другому.

Вероятно, вам придется использовать вложенные циклы foreach при работе с многомерными массивами. Однако большую часть времени вы будете писать цикл foreach с одной глубиной.

В этом руководстве вы познакомитесь с широким спектром тем, связанных с использованием цикла foreach в PHP. Мы коснемся таких тем, как массивы, ассоциативные массивы, многомерные массивы, редактирование элементов, использование оператора break и использование оператора continue.

Содержание

  • Синтаксис петли Foreach
  • Как использовать петлю Foreach в PHP
    • с использованием индекса Array
    • . Из цикла foreach
    • Использование continue в цикле foreach
  • Заключение

Синтаксис цикла foreach

Существует два разных способа написания цикла foreach в PHP.

Наш первый пример перебирает массив, присваивая значение текущего элемента переменной $value . Вы можете использовать переменную $value в любом месте блока кода foreach.

Наш второй пример предназначен для ассоциативных массивов, которые будут содержать диапазон ключей. На каждой итерации текущий ключ будет храниться в переменной $key , а значение элемента — в переменной $value .

Вы можете написать цикл foreach, используя альтернативный синтаксис. В приведенном ниже примере показан альтернативный синтаксис для нашего первого примера, но вы можете использовать его в любом типе цикла foreach.

Если вам нужно отредактировать элементы массива в цикле, вы можете поставить перед переменной $value и . Использование и гарантирует, что переменной будет присвоена ссылка на значение, а не просто копия значения.

Как использовать цикл foreach в PHP

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

Ниже мы рассмотрим все основные особенности обработки цикла foreach, включая написание оператора foreach как для обычного массива, так и для ассоциативного массива.

Цикл foreach для индексированного массива

В этом примере мы создаем простой цикл foreach PHP, который будет перебирать массив, содержащий диапазон строк.

На каждой итерации значение текущего элемента копируется в переменную $value . Внутри блока кода цикла вы можете использовать значение по своему усмотрению, ссылаясь на $значение переменная.

Приведенный ниже код просто перебирает наш массив и выводит каждое значение с помощью эха.

Ниже приведен вывод приведенного выше кода. Как видите, каждый элемент массива напечатан по порядку.

Цикл foreach для ассоциативного массива

Если вы используете ассоциативный массив, описанный выше метод все равно будет работать; однако у вас будет доступ только к значению каждого элемента. Чтобы также иметь доступное значение ключа, вы должны указать его в операторе foreach.

В приведенном ниже примере значение ключа будет доступно в переменной $key , а значение элемента доступно в переменной $value . Каждая итерация будет переходить к следующему элементу, пока не достигнет конца массива.

В приведенном ниже выводе вы можете увидеть значение ключа, за которым следует значение элемента для каждого элемента в массиве.

Цикл foreach для многомерного массива

Если у вас есть многомерный массив, вам потребуется вложить цикл foreach внутрь другого цикла foreach для доступа к элементам внутренних массивов. Внешний цикл будет перебирать каждый из массивов, а внутренний цикл будет перебирать каждый элемент массива.

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

В приведенном ниже примере наш внешний цикл будет циклически перебирать каждый массив, хранящийся в нашем массиве $fruits . Внутренний цикл будет перебирать каждый элемент текущего массива.

Выходные данные демонстрируют, как работает наш вложенный цикл foreach в приведенном выше примере кода. Каждый элемент печатается до того, как он переместится в следующий массив. $value — текущий массив, а $value2 — текущий элемент внутри нашего массива $value .

Редактирование значений в цикле foreach

Если вы попытаетесь изменить значения с помощью цикла foreach PHP, вам потребуется добавить и в начало переменной $value . Использование и перед переменной $value укажет PHP присвоить $value ссылку на исходное значение и не использовать копию значения переменной.

В приведенном ниже примере мы передаем ссылку, а не значение. Использование ссылки позволит нам редактировать элементы массива внутри цикла foreach.

Мы также сбрасываем значение $ после выхода из цикла. Если вы не сбросите переменную $value , она все равно будет содержать ссылку на наш последний элемент. Если вы повторно используете $value без предварительного использования unset, вы можете столкнуться с непредвиденным поведением.

В приведенном ниже выводе видно, что значения массива были изменены.

В нашем примере ниже мы не используем ссылку, а просто используем копию значения элемента массива. PHP не сохранит никаких изменений, если вы используете значение элемента.

Как видно из вывода, ни одно из наших изменений в массив не вносится, и за пределами цикла foreach массив выглядит нетронутым.

Выход из цикла foreach

Как и в большинстве других циклов PHP, вы можете использовать оператор break для досрочного завершения цикла. Вы можете захотеть завершить цикл по разным причинам. Например, вы нашли нужные данные и внесли необходимые изменения.

В нашем примере ниже мы выходим из цикла foreach , когда наше значение равно «банан».

Так как банан был нашим вторым элементом в массиве, мы выводим только значение первого элемента в массиве.

Использование continue в цикле foreach

Если вам нужно пропустить или завершить итерацию цикла foreach досрочно, вы можете использовать оператор continue. Есть много причин, по которым вы можете использовать con t inue . Например, пропуск итерации может быть полезен, если вам не нужно обрабатывать данные в этом конкретном элементе.

В приведенном ниже коде мы заканчиваем текущую итерацию досрочно, когда значение равно «банан».

Как видно из приведенного ниже вывода, мы пропустили вывод значения, когда оно было равно «банану». После «банана» мы продолжили выводить остальные значения.

Заключение

Надеюсь, к концу этого руководства вы хорошо понимаете, как использовать цикл foreach в PHP. Это стандартный цикл, который отлично подходит для обработки данных в массивах, поэтому важно, чтобы вы понимали, как они работают.

Я предлагаю вам изучить другие циклы, если вы новичок в программировании. У каждого цикла есть свой вариант использования, поэтому я рекомендую узнать о циклах while, for и do-while. Понимание и правильное их использование может помочь улучшить читабельность и производительность вашего кода.

Если мы сможем улучшить этот урок, не стесняйтесь сообщить нам об этом, оставив комментарий ниже.

PHP foreach

Резюме : в этом руководстве вы узнаете, как использовать PHP 9Оператор 0007 foreach для перебора элементов массива.

Знакомство с оператором PHP foreach

PHP предоставляет вам оператор foreach , который позволяет перебирать элементы массива, либо индексированного массива, либо ассоциативного массива.

Оператор foreach перебирает все элементы массива по одному за раз. Он начинается с первого элемента и заканчивается последним. Поэтому вам не нужно заранее знать количество элементов в массиве.

На следующей блок-схеме показано, как работает оператор foreach :

PHP foreach с индексированными массивами

Для перебора всех элементов индексированного массива используется следующий синтаксис:

  Язык кода: HTML, XML (xml)  

Когда PHP встречает оператор foreach , он присваивает первый элемент массива переменной, следующей за как ключевое слово ( $элемент ).

На каждой итерации PHP присваивает следующий элемент массива переменной $element . Если PHP достигает последнего элемента, цикл завершается.

В следующем примере оператор foreach используется для отображения элементов массива $colors :

 
'
'; } Язык кода: HTML, XML (xml)

Вывод:

 красный
зеленый
синий  Язык кода: открытый текст (открытый текст)  

PHP foreach с ассоциативным массивом

Для перебора элементов ассоциативного массива используется следующий синтаксис:

  $value) {
   //здесь обрабатываем элемент;
}  Язык кода: HTML, XML (xml)  

Когда PHP встречает оператор foreach , он обращается к первому элементу и присваивает:

  • Ключ элемента к переменной
    $key
    .
  • Значение элемента в переменной $value .

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

В следующем примере показано, как использовать оператор foreach для перебора элементов заглавные буквы массив:

  'Токио',
'Франция' => 'Париж',
'Германия' => 'Берлин',
'Великобритания' => 'Лондон',
'Соединенные Штаты' => 'Вашингтон, округ Колумбия'
];
foreach ($ Capitals as $ Country => $ Capital) {
echo "Столица {$country} — $столица" .