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

Комментарии