Цикл 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