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

PHP 7 циклы и работа с break и continue

В этой части учебника рассмотрим циклы в PHP 7, вы научитесь выходить из него и делать бесконечные циклы.

Для начала разберём, для чего вообще нужны циклы, всё очень просто, в первую очередь они нужны для того чтобы не повторять код, вот и всё.

PHP циклы:

В PHP есть несколько циклов, а конкретно четыре, сейчас мы все их рассмотрим.

Цикл while:

Этот цикл пожалуй самый простой из всех, вот его синтаксис.

$i = 0; // Создаём переменную и присваиваем ей ноль

 

// Пишем цикл while

while ($i < 10) {

    echo $i . ‘ ‘; // Выводим переменную $i

    $i++; // Увеличиваем переменную $i на один

}

Вот такой код получился, создаём переменную $i которую будим выводить на экран и увеличивать на один после каждой итерации цикла
(Итерация — один проход по циклу), после ключевого слова while в круглых скобках обязательно пишем условие при которых будет работать цикл, в нашем случае, пока $i не станет равен 10.

Вот что вывелось на экран.

Результат работы в PHP 7 цикл whileРезультат работы в PHP 7 цикл while

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

$i = 0; // Создаём переменную и присваиваем ей ноль

 

// Пишем цикл while

while ($i < 10) :

    echo $i . ‘ ‘; // Выводим переменную $i

    $i++; // Увеличиваем переменную $i на один

endwhile

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

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

$i = 0; // Создаём переменную и присваиваем ей ноль

 

// Пишем цикл while бесконечным

while (true) {

    echo $i . ‘ ‘; // Выводим переменную $i

    $i++; // Увеличиваем переменную $i на один

}

Как видите, что бы сделать его бесконечным, достаточно только в условие цикла, написать true, вот что получилось.

PHP бесконечный цикл, результат работы

PHP бесконечный цикл, результат работы

Также ещё делают переменную, а в цикли условие, при каких обстоятельствах переменная будет меняться на false, и если она равно false, то цикл заканчивается, как это сделать будет ниже.

Цикл do while:

Этот цикл очень похож на предыдущий, единственное, обязательно хотя бы один раз произойдёт итерация, так как он проверяет условие после итерации, а не перед неё.

$i = 0; // Создаём переменную и присваиваем ей ноль

 

// Пишем цикл do while, в начале всегда пишем do

do {

    echo $i . ‘ ‘; // Выводим переменную $i

    $i++; // Увеличиваем переменную $i на один

} while ($i < 10); // Условие пишется в конце цикла

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

Цикл for:

Это наверное самый популярный цикл во многих языках программирования, но не в PHP, тем не менее, о нём рассказать надо.

// Пишем цикл for

for ($i = 0; $i < 10; $i++) {

    echo $i . ‘ ‘; // Выводим переменную $i

}

Давайте разберём его, в начале в круглых скобках пишется переменная, которую будем увеличивать на один, потом переменная увеличиваться на один, идёт проверка чему в итоге равна она.

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

Также вы можете использовать другие операции и условия, к примеру, $i можете присвоит один и уменьшать её на один, пока переменная не будет равна нулю.

Ещё у этого цикла есть вид для верстальщиков.

// Пишем цикл for

for ($i = 0; $i < 10; $i++) :

    echo $i . ‘ ‘; // Выводим переменную $i

endfor;

Этот цикл тоже не особо популярен.

Цикл foreach:

Этот цикл очень популярен, но он сделан для работы с массивами, поэтому, рекомендую сначала прочитать часть про массивы (Ссылка на часть), потом уже переходить к циклу foreach.

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

// Объявление массива $arr

$arr = array(1, 2, 3, 4);

 

// Запуск цикла foreach

foreach ($arr as $value) {

    echo $value . ‘ ‘; // Вывод значений массива на экран

}

Вот результат.

Вывод цикла foreachВывод цикла foreach

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

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

// Объявление массива $arr

$arr = array(80, 12, 44, 15);

 

// Запуск цикла foreach

foreach ($arr as $key => $value) {

    echo $key . ‘ => ‘ . $value . ‘</br>’; // Вывод ключа и значений массива на экран

}

Вот результат.

Вывод цикла foreach с ключомВывод цикла foreach с ключом

Как видите, слева показывается индекс (ключ) значения, а справа само значение, точно также как и переменная, ключ это переменная.

Также у foreach есть вид специально для верстальшиков.

// Объявление массива $arr

$arr = array(80, 12, 44, 15);

 

// Запуск цикла foreach для верстальшиков

foreach ($arr as $key => $value) :

    echo $key . ‘ => ‘ . $value . ‘</br>’; // Вывод ключа и значений массива на экран

endforeach

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

PHP выйти из цикла:

Что бы в PHP выйти из цикла, есть два способа, первый, просто сделать переменную которая будет равна true, а в цикле условий и кода оно выполняется менять переменную на false.

$i = 0; // Создаём переменную и присваиваем ей ноль

$cycle_works = true; // Переменная, которая отвечает за работу в цикли

 

// Пишем цикл while

while ($cycle_works) {

    echo $i . ‘ ‘; // Выводим переменную $i

    $i++; // Увеличиваем переменную $i на один

    // Условие при котором надо менять значение переменной $cycle_work

    if ($i == 10) {

        $cycle_works = false; // меняем значение переменной

    }

}

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

Второй вариант, в том, что бы в PHP использовать break и continue, сейчас вы узнаете о них.

Continue:

Как же использовать в PHP в цикле while continue, всё очень просто.

$i = 0; // Создаём переменную и присваиваем ей ноль

 

while ($i < 5) {

    $i++; // Увеличиваем переменную на один

    // условие при котором должен выходить цикл

    if ($i == 2) {

        continue; // Выход из цикла

    }

    echo $i . ‘ ‘; // Отображение $i

}

Вот результат.

Результат работы в PHP while continueРезультат работы в PHP while continue

Как видите цифра два не вывелась, но почему же вывелись остальные, дела в том, что continue выходит из цикла перед циклом, при этом переменная $i не обнуляется.

То есть, то что идёт после continue не будет работать, при этом цикл снова пройдётся без изменений, надеюсь мне удалось понятно это объяснить.

break:

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

$i = 0; // Создаём переменную и присваиваем ей ноль

 

while ($i < 5) {

    $i++; // Увеличиваем переменную на один

    // условие при котором должен выходить цикл

    if ($i == 2) {

        break; // Выход из цикла

    }

    echo $i . ‘ ‘; // Отображение $i

}

Результат этого кода.

Результат работы в PHP while breakРезультат работы в PHP while break

Так получается, потому что, когда переменная $i, становится равна двум, то срабатывает break и выходит из цикла, после цикла, не успев вывести на экран.

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

Вывод:

Тут я разобрал как работают в PHP 7 циклы, разобрали циклы while, do while, for, и foreach, ещё рассмотрели break с continue.

Подписываетесь на соц-сети:

Оценка:

(Пока оценок нет)

Результат работы в PHP while breakРезультат работы в PHP while break Загрузка…

Дополнительно:

Задачи на циклы foreach, while, for в PHP

Перед решением задач изучите теорию к данному уроку.

Примеры решения задач

Задача

Задача. Дан массив с элементами ‘html’, ‘css’, ‘php’, ‘js’, ‘jq’. С помощью цикла foreach выведите эти слова в столбик.

Решение: Для начала необходимо создать сам массив. В данном случае мы можем воспользоваться различными способами: объявить через [] либо просто воспользоваться присваиванием $arr[] = ‘html’; $arr[] = ‘php’; и так далее. Я выбрал первый способ, так как он занимает меньше места при записи:

<?php
	$arr = ['html', 'css', 'php', 'js', 'jq'];
?>

Теперь необходимо воспользоваться циклом foreach:

<?php
	$arr = ['html', 'css', 'php', 'js', 'jq'];
	foreach ($arr as $elem) {
		echo $elem.'<br>'; 
	}
?>

Как это все работает: в переменной $elem все элементы будут лежать по порядку: сначала ‘html’, потом ‘css’ и так далее. Я буду выводить их на экран с помощью echo, а после вывода элемента ставить тег <br> (он делает перевод строки). Содержимое $elem и тег <br> являются строками, поэтому между ними я ставлю точку — соединяю тем самым две строки вместе.

Задача

Задача. Дан массив с элементами 10, 20, 15, 17, 24, 35. Найдите сумму элементов этого массива. Запишите ее в переменную $result.

Решение: Первое решение, которое может прийти в голову новичку — это просуммировать все элементы массива ‘руками’: $arr[0]+$arr[1]+…+$arr[5].

Однако, этот способ не правильный, так как в случае изменения массива код придется переписывать (например, в него добавится еще 10 элементов, или 100, что вообще будет печально). Решение необходимо делать как можно более универсальным.

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

Теперь нужно подумать о том, как просуммировать элементы массива в цикле. Для этого я введу переменную $result, к которой при каждом проходе цикла буду прибавлять ее саму и еще один элемент массива таким образом $result = $result + $elem:

<?php
	$arr = [10, 20, 15, 17, 24, 35];

	$result = 0;
	foreach ($arr as $elem) {
		$result = $result + $elem;
	}
	echo $result; //выведем сумму на экран
?>

В строке $result = 0 я зануляю переменную $result, если этого не сделать — в цикле возникнет ошибка в строке $result = $result + $elem, так как при первом проходе цикла переменная $result не будет определена.

Как работает строчка $result = $result + $elem: при первом проходе в переменной $result будет 0, в $elem – 10 (первый элемент массива), тогда в $result запишется 0+10 = 10.

При втором проходе цикла в $result лежит уже 10 (значение из прошлого прохода цикла), а в $elem лежит 20 (следующий элемент массива), тогда в $result запишется 10+20=30.

При третьем проходе цикла в $result лежит 30, а в $elem – 15, в $result запишется 30+15 = 45. И так далее пока цикл не закончится.

Строчку $result = $result + $elem можно записать короче: $result += $elem.

Задача

Задача. Выведите столбец чисел от 1 до 100.

Решение: Задачу можно решить как циклом for, так и циклом while. Вначале решим через цикл while:

<?php
	$i = 1; //счетчик цикла устанавливаем в 1
	while ($i <= 100) {
		echo $i.'<br>'; //выведет 1,2... 100
		/*
			С помощью оператора ++ увеличиваем $i 
			на единицу при каждом проходе цикла:
		*/
		$i++;
	}
?>

Решение через цикл for:

<?php
	/*
		В начале цикла $i будет равно 1,
 		цикл будет выполнятся пока $i <= 100,
		после каждого прохода к $i прибавляется единица:
	*/
	for ($i = 1; $i <= 100; $i++) {
		echo $i.'<br>'; //выведет 1,2... 100
	}
?>

Задачи для решения

Работа с foreach

Дан массив с элементами ‘html’, ‘css’, ‘php’, ‘js’, ‘jq’. С помощью цикла foreach выведите эти слова в столбик.

Дан массив с элементами 1, 2, 3, 4, 5. С помощью цикла foreach найдите сумму элементов этого массива. Запишите ее в переменную $result.

Дан массив с элементами 1, 2, 3, 4, 5. С помощью цикла foreach найдите сумму квадратов элементов этого массива. Результат запишите переменную $result.

Работа с ключами

Дан массив $arr. С помощью цикла foreach выведите на экран столбец ключей и элементов в формате ‘green — зеленый’.

$arr = ['green'=>'зеленый', 'red'=>'красный','blue'=>'голубой'];

Дан массив $arr с ключами ‘Коля’, ‘Вася’, ‘Петя’ и с элементами ‘200’, ‘300’, ‘400’. С помощью цикла foreach выведите на экран столбец строк такого формата: ‘Коля — зарплата 200 долларов.’.

Циклы while и for

Решите эти задачи сначала через цикл while, а затем через цикл for.

Выведите столбец чисел от 1 до 100.

Выведите столбец чисел от 11 до 33.

Выведите столбец четных чисел в промежутке от 0 до 100.

С помощью цикла найдите сумму чисел от 1 до 100.

Задачи

Дан массив с элементами 2, 5, 9, 15, 0, 4. С помощью цикла foreach и оператора if выведите на экран столбец тех элементов массива, которые больше 3-х, но меньше 10.

Дан массив с числами. Числа могут быть положительными и отрицательными. Найдите сумму положительных элементов этого массива.

Дан массив с элементами 1, 2, 5, 9, 4, 13, 4, 10. С помощью цикла foreach и оператора if проверьте есть ли в массиве элемент со значением, равным 4. Если есть — выведите на экран ‘Есть!’ и выйдите из цикла. Если нет — ничего делать не надо.

Дан массив числами, например: [’10’, ’20’, ’30’, ’50’, ‘235’, ‘3000’]. Выведите на экран только те числа из массива, которые начинаются на цифру 1, 2 или 5.

Дан массив с элементами 1, 2, 3, 4, 5, 6, 7, 8, 9. С помощью цикла foreach создайте строку ‘-1-2-3-4-5-6-7-8-9-‘.

Составьте массив дней недели. С помощью цикла foreach выведите все дни недели, а выходные дни выведите жирным.

Составьте массив дней недели. С помощью цикла foreach выведите все дни недели, а текущий день выведите курсивом. Текущий день должен храниться в переменной $day.

Задачи посложнее

С помощью цикла for заполните массив числами от 1 до 100. То есть у вас должен получится массив [1, 2, 3… 100].

Дан массив $arr. С помощью цикла foreach запишите английские названия в массив $en, а русские — в массив $ru.

$arr = ['green'=>'зеленый', 'red'=>'красный', 'blue'=>'голубой'];

Дано число $num=1000. Делите его на 2 столько раз, пока результат деления не станет меньше 50. Какое число получится? Посчитайте количество итераций, необходимых для этого (итерация — это проход цикла). Решите задачу сначала через цикл while, а потом через цикл for.

Урок 14. PHP — Цикл Foreach

Представьте, что у вас есть ассоциативный массив, который вы хотите перебрать. PHP предоставляет простой способ использовать каждый элемент массива по очереди с помощью Foreach конструкции.

На простом языке это будет звучать примерно так:
«Для каждого элемента в указанном массиве выполнить этот код.»

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

PHP Foreach: Пример

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


$employeeAges;
$employeeAges["Lisa"] = "28";
$employeeAges["Jack"] = "16";
$employeeAges["Ryan"] = "35";
$employeeAges["Rachel"] = "46";
$employeeAges["Grace"] = "34";

foreach( $employeeAges as $key => $value){
	echo "Name: $key, Age: $value <br />";
}

Получаем результат:


 Name: Lisa, Age: 28
 Name: Jack, Age: 16
 Name: Ryan, Age: 35
 Name: Rachel, Age: 46
 Name: Grace, Age: 34

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

For each синтаксис: $something as $key => $value

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

Оператор «=>» представляет связь между ключом и значением. В нашем примере мы назвали их как ключ — $key и значение — $value. Тем не менее, было бы легче думать о них, как об имени и возрасте. Ниже в нашем примере мы так и сделаем, и обратите внимание, что результат будет тот же, потому что мы только изменили имена переменных, которые относятся к ключам и значениям.


$employeeAges;
$employeeAges["Lisa"] = "28";
$employeeAges["Jack"] = "16";
$employeeAges["Ryan"] = "35";
$employeeAges["Rachel"] = "46";
$employeeAges["Grace"] = "34";

foreach( $employeeAges as $name => $age){
	echo "Name: $name, Age: $age <br />";
}

Ну и результат, повторимся, тот же самый:


 Name: Lisa, Age: 28
 Name: Jack, Age: 16
 Name: Ryan, Age: 35
 Name: Rachel, Age: 46
 Name: Grace, Age: 34

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

← Цикл For | Содержание | Цикл Do While →

php для цикла присваивания переменных в массиве

Переполнение стека
  1. Товары
  2. Клиенты
  3. Случаи использования
  1. Переполнение стека Публичные вопросы и ответы
  2. Команды Частные вопросы и ответы для вашей команды
  3. предприятие Частные вопросы и ответы для вашего предприятия
  4. работы Программирование и связанные с ним технические возможности карьерного роста
  5. Талант Нанимать технический талант
  6. реклама Связаться с разработчиками по всему миру
,

php для цикла для сравнения значений в массиве

Переполнение стека
  1. Товары
  2. Клиенты
  3. Случаи использования
  1. Переполнение стека Публичные вопросы и ответы
  2. Команды Частные вопросы и ответы для вашей команды
  3. предприятие Частные вопросы и ответы для вашего предприятия
  4. работы Программирование и связанные с ним технические возможности карьерного роста
  5. Талант Нанимать технический талант
  6. реклама Связаться с разработчиками по всему миру
,
php — Как перебрать ассоциативный массив и получить ключ?
Переполнение стека
  1. Товары
  2. Клиенты
  3. Случаи использования
  1. Переполнение стека Публичные вопросы и ответы
  2. Команды Частные вопросы и ответы для вашей команды
  3. предприятие Частные вопросы и ответы для вашего предприятия
  4. работы Программирование и связанные с ним технические возможности карьерного роста
  5. Талант Нанимать технический талант
  6. реклама Связаться с разработчиками по всему миру
,
PHP — Как я могу пройти через два массива одновременно?
Переполнение стека
  1. Товары
  2. Клиенты
  3. Случаи использования
  1. Переполнение стека Публичные вопросы и ответы
  2. Команды Частные вопросы и ответы для вашей команды
  3. предприятие Частные вопросы и ответы для вашего предприятия
  4. работы Программирование и связанные с ним технические возможности карьерного роста
  5. Талант Нанимать технический талант
  6. реклама Связаться с разработчиками по всему миру

Загрузка…

  1. Авторизоваться зарегистрироваться
  2. текущее сообщество

.