0 знаков
13. Циклы foreach и for в PHP
КраткоОбзор циклов в программировании на PHP
- Циклы
while
иdo-while
используются реже, чем циклыfor
иforeach
.- Цикл
for
более гибкий, но требует создания переменных для счётчиков.- Вложенный цикл
for
позволяет перебирать массивы с разными счётчиками.- Цикл
foreach
прост в использовании и перебирает все элементы массива.Использование операторов break и continue
- Оператор
break
прерывает текущий цикл.- Оператор
continue
пропускает текущую итерацию цикла.Задачи для закрепления материала
- Создание массивов и перебор чисел с помощью циклов
for
иforeach
.- Использование операторов
break
иcontinue
для управления циклами.- Вычисление сумм и печать элементов массивов с условиями.
- Создание ассоциативных массивов и перебор элементов с условиями.
Переход к следующему уроку
- В следующем уроке будет рассмотрен раздел про функции.
Мы c вами узнали из предыдущего урока о циклах while и do-while. Честно сказать, эти циклы не так часто используются, как циклы for
и foreach
. Нам часто будет необходимо перебирать значения и делать необходимые операции с ними, давайте поэтому познакомимся и с более используемыми циклами.
Цикл for
Этот вид циклов сложнее while и do-while, но он более гибкий: нам не нужно создавать лишние переменные для счётчиков и по вложенным массивам он проходится более читабельно.
for (аргумент 1; аргумент 2; аргумент 3) {
// Тело цикла
}
Выше в псевдокоде я написал актуальный синтаксис оператора for
. Каждый аргумент должен быть разделён точкой с запятой (;
). Вот что нужно писать в каждом аргументе:
аргумент 1
— создаём переменную-счётчик;аргумент 2
— создаём условие, до каких пор будет выполняться цикл;аргумент 3
— будем после каждого прохода по циклу к счётчику прибавлять значение.
<?php
$arr = [1, 2, 3, 4, 5];
// Аргумент 1
for ($i = 0; $i < count($arr); $i++) {
print_r($arr[$i]); // Распечатает от 1 до 5
}
?>
Число переменных значительно уменьшилось с предыдущего раза. Мы даже можем гибко создать обратный цикл:
<?php
$arr = [1, 2, 3, 4, 5];
for ($i = (count($arr) - 1); $i >= 0; $i--) {
print_r($arr[$i]); // Распечатает 5, 4, 3, 2, 1
}
?>
Усложним задачу: у нас есть вложенный массив женских и мужских имён в таком виде:
[
['Ярослав', 'Михаил', 'Геннадий'],
['Людмила', 'Ксения', 'София'],
]
Необходимо перебрать массивы и распечатать каждое имя на экран:
<?php
$arr = [
['Ярослав', 'Михаил', 'Геннадий'],
['Людмила', 'Ксения', 'София'],
];
for ($i = 0; $i < count($arr); $i++) {
for ($j = 0; $j < count($arr[$i]); $j++) {
print_r($arr[$i][$j] . PHP_EOL);
}
}
?>
Вывод будет таким:
Ярослав
Михаил
Геннадий
Людмила
Ксения
София
Мы с вами создали вложенный массив. Сначала мы перебираем верхний массив с переменной $i
, а затем пишем вложенный цикл и перебираем уже вложенные массивы с переменной $j
.
ВажноСтарайтесь не путать переменные во вложенных циклах. Переменные для каждого цикла должны быть разными.
Таким способом вы можете перебирать очень много вложенных массивов.
Вы могли подумать: «Это же неудобно! Нужно считать вложенные массивы, а если этих значений будет очень много, что делать?»
Хорошая мысль! Нам для этого нужна рекурсия, но об этом в разделе про функции.
Цикл foreach
Самый лёгкий цикл из всех - foreach
. В нем нет условий, цикл перебирает все от начала и до конца:
foreach (массив as ключ => значение) {
// Логика цикла
}
В начале круглых скобок цикла мы указываем перебираемый массив. После ключевого слова as
мы указываем ключ и значение. В индексном массиве ключом будет индекс элемента, в ассоциативном — строка.
Мы можем опустить ключ. В таком случае цикл будет брать только значение.
<?php
$arr = ['a', 'b', 'c', 'd'];
foreach ($arr as $key => $value) {
print_r("Ключ: {$key}" . PHP_EOL);
print_r("Значение: {$value}" . PHP_EOL);
}
?>
Вывод будет таким:
Ключ: 0
Значение: a
Ключ: 1
Значение: b
Ключ: 2
Значение: c
Ключ: 3
Значение: d
Вы могли заметить константу PHP_EOL
- это обычный перевод на новую строку (работает только в консоли, в браузере не будет работать, там нужно использовать HTML теги).
Напишем цикл без ключа:
<?php
$arr = ['a', 'b', 'c', 'd'];
foreach ($arr as $value) {
print_r("Значение: {$value}" . PHP_EOL);
}
?>
Вывод будет таким:
Значение: a
Значение: b
Значение: c
Значение: d
Операторы break и continue
В циклах существуют ещё два очень важный оператора.
- Оператор
break
- прерывает выполнение текущего цикла. - Оператор
continue
- выполняет переход к следующей итерации цикла.
Попробуем их на практике. Дан массив и переменная, если в массиве существует значение из переменной необходимо остановить цикл. Для решения задачи будем использовать цикл foreach
.
<?php
$arr = [2, 13, 31, 54, 5776, 67676, 534];
$number = 5776;
foreach ($arr as $value) {
if ($value === $number) {
break;
}
print_r($value . PHP_EOL);
}
?>
Вывод будет таким:
2
13
31
54
5776
67676
Тоже самое с оператором continue
, только в таком случае будет пропущена итерация:
<?php
$arr = [2, 13, 31, 54, 5776, 67676, 534];
$number = 5776;
foreach ($arr as $value) {
if ($value === $number) {
continue;
}
print_r($value . PHP_EOL);
}
?>
Вывод будет таким:
2
13
31
54
67676
534
Заключение
Рассмотрели ещё два важных цикла. Они, на самом деле, очень часто используются в каждом языке. Допустим, функция array_sum()
суммирует все элементы массива и возвращает результат. Суммирует она, конечно же, с помощью цикла, так что циклы сплошь и рядом.
Циклы важно понимать, чтобы уверенно их использовать в своем коде. Для этого не пропускайте предлагаемые ниже задачи: они нужны для закрепления материала и дальнейшего понимания уроков.
На этом моменте мы переходим к разделу про функции.
Задания
1. Создайте массив из 10 целых чисел. Используя цикл for
, выведите на экран только четные числа. Если встречается число 0, прервите цикл.
2. С помощью цикла foreach
переберите массив строк, состоящий из имен. Выведите каждое имя, кроме тех, которые начинаются на букву "А". Используйте оператор continue
. (здесь вам нужно будет применить [ссылка доступна авторизованным пользователям])
3. Создайте массив из 10 случайных чисел от 1 до 100. Найдите сумму чисел, пока не встретите число больше 50. Используйте цикл for
и break
.
4. Используя цикл for
, напечатайте числа от 1 до 20. Пропустите числа, кратные 3.
5. С помощью foreach
переберите массив дней недели. Выведите все дни, кроме субботы и воскресенья.
6. Создайте массив из 15 целых чисел. Используя for
, найдите и выведите первое число, которое делится на 5.
7. Напишите цикл for
, который считает от 100 до 0. Пропустите числа, которые делятся на 7, выведите остальные числа.
8. Создайте ассоциативный массив с названиями фруктов и их ценами. Используя foreach
, выведите названия фруктов, чья цена больше 50, и пропустите другие.
9. С помощью цикла for
напечатайте квадрат каждого числа от 1 до 10. Если квадрат равен 36, прервите выполнение цикла.
10. Используя foreach
, переберите массив с числами от 1 до 30. Выведите на экран только те числа, которые не являются делителями 4.
Похожие уроки Codebra
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ