Цикл 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.
Вот что вывелось на экран.
Также, его можно записать в удобной форме для верстальщика.
$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, вот что получилось.
Также ещё делают переменную, а в цикли условие, при каких обстоятельствах переменная будет меняться на 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 . ‘ ‘; // Вывод значений массива на экран } |
Вот результат.
Как видите он вывел на экран значения массива, сначала в круглых скобках пишется сам массив, потом слово as и название переменной, оно может быть любое, эту переменную используем как обычную переменную внутри цикла, равна она одному значению массива, и при каждой итерации, оно меняется на следующее значение.
Также можем получить ключ каждого значение, делается это так.
// Объявление массива $arr $arr = array(80, 12, 44, 15);
// Запуск цикла foreach foreach ($arr as $key => $value) { echo $key . ‘ => ‘ . $value . ‘</br>’; // Вывод ключа и значений массива на экран } |
Вот результат.
Как видите, слева показывается индекс (ключ) значения, а справа само значение, точно также как и переменная, ключ это переменная.
Также у 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 } |
Вот результат.
Как видите цифра два не вывелась, но почему же вывелись остальные, дела в том, что continue выходит из цикла перед циклом, при этом переменная $i не обнуляется.
То есть, то что идёт после continue не будет работать, при этом цикл снова пройдётся без изменений, надеюсь мне удалось понятно это объяснить.
break:
В PHP это почти тоже самое, что и continue, но выходит из цикла уже после него, то есть цикл больше не будет проходить, сейчас покажу это на примере while break.
$i = 0; // Создаём переменную и присваиваем ей ноль
while ($i < 5) { $i++; // Увеличиваем переменную на один // условие при котором должен выходить цикл if ($i == 2) { break; // Выход из цикла } echo $i . ‘ ‘; // Отображение $i } |
Результат этого кода.
Так получается, потому что, когда переменная $i, становится равна двум, то срабатывает break и выходит из цикла, после цикла, не успев вывести на экран.
Но на мой взгляд лучше делать правильные условия работы цикла, чем использовать break и continue.
Вывод:
Тут я разобрал как работают в PHP 7 циклы, разобрали циклы while, do while, for, и foreach, ещё рассмотрели break с continue.
Подписываетесь на соц-сети:
Оценка:
(Пока оценок нет)
Загрузка…Дополнительно:
Задачи на циклы foreach, while, for в PHP
Перед решением задач изучите теорию к данному уроку.
Примеры решения задач
Задача
Задача. Дан массив с элементами ‘html’, ‘css’, ‘php’, ‘js’, ‘jq’. С помощью цикла foreach выведите эти слова в столбик.
Решение: Для начала необходимо создать сам массив. В данном случае мы можем воспользоваться различными способами: объявить через [] либо просто воспользоваться присваиванием
<?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> (он делает перевод строки). Содержимое
Задача
Задача. Дан массив с элементами 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 + $elem: при первом проходе в переменной $result будет 0, в $elem – 10 (первый элемент массива), тогда в $result запишется 0+10 = 10.
При втором проходе цикла в $result лежит уже 10 (значение из прошлого прохода цикла), а в $elem лежит 20 (следующий элемент массива), тогда в $result запишется 10+20=30.
При третьем проходе цикла в $result лежит 30, а в $elem – 15, в $result
Строчку $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 найдите сумму квадратов элементов этого массива. Результат запишите переменную
Работа с ключами
Дан массив $arr. С помощью цикла foreach выведите на экран столбец ключей и элементов в формате ‘green — зеленый’.
$arr = ['green'=>'зеленый', 'red'=>'красный','blue'=>'голубой'];
Дан массив $arr с ключами ‘Коля’, ‘Вася’, ‘Петя’ и с элементами ‘200’, ‘300’, ‘400’. С помощью цикла foreach выведите на экран столбец строк такого формата: ‘Коля — зарплата 200 долларов.’.
Циклы while и for
Решите эти задачи сначала через цикл while, а затем через цикл for.
Выведите столбец чисел от 1 до 100.
Выведите столбец четных чисел в промежутке от 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 для цикла присваивания переменных в массиве
Переполнение стека- Товары
- Клиенты
- Случаи использования
- Переполнение стека Публичные вопросы и ответы
- Команды Частные вопросы и ответы для вашей команды
- предприятие Частные вопросы и ответы для вашего предприятия
- работы Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимать технический талант
- реклама Связаться с разработчиками по всему миру
php для цикла для сравнения значений в массиве
Переполнение стека- Товары
- Клиенты
- Случаи использования
- Переполнение стека Публичные вопросы и ответы
- Команды Частные вопросы и ответы для вашей команды
- предприятие Частные вопросы и ответы для вашего предприятия
- работы Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимать технический талант
- реклама Связаться с разработчиками по всему миру
- Товары
- Клиенты
- Случаи использования
- Переполнение стека Публичные вопросы и ответы
- Команды Частные вопросы и ответы для вашей команды
- предприятие Частные вопросы и ответы для вашего предприятия
- работы Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимать технический талант
- реклама Связаться с разработчиками по всему миру
- Товары
- Клиенты
- Случаи использования
- Переполнение стека Публичные вопросы и ответы
- Команды Частные вопросы и ответы для вашей команды
- предприятие Частные вопросы и ответы для вашего предприятия
- работы Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимать технический талант
- реклама Связаться с разработчиками по всему миру
Загрузка…
- Авторизоваться зарегистрироваться
текущее сообщество