Синтаксис цикла 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>';
}