Внимание! На этой странице вы найдете материал урока из архивного курса по PHP. Курс был написан в 2024 году одним из первых учеников Codebra и, к моменту написания курса, опытным бэкэнд-разработчиком. К сожалению, курс не был дописан, а его автор молча пропал.
Полный список уроков доступен по тегу Архивный курс по 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() суммирует все элементы массива и возвращает результат. Суммирует она, конечно же, с помощью цикла, так что циклы сплошь и рядом.
Циклы важно понимать, чтобы уверенно их использовать в своем коде. Для этого не пропускайте предлагаемые ниже задачи: они нужны для закрепления материала и дальнейшего понимания уроков.
На этом моменте мы переходим к разделу про функции.
Задачи
- Создайте массив из 10 целых чисел. Используя цикл
for, выведите на экран только четные числа. Если встречается число 0, прервите цикл. - С помощью цикла
foreachпереберите массив строк, состоящий из имен. Выведите каждое имя, кроме тех, которые начинаются на букву "А". Используйте операторcontinue. (здесь вам нужно будет применить str_starts_with) - Создайте массив из 10 случайных чисел от 1 до 100. Найдите сумму чисел, пока не встретите число больше 50. Используйте цикл
forиbreak. - Используя цикл
for, напечатайте числа от 1 до 20. Пропустите числа, кратные 3. - С помощью
foreachпереберите массив дней недели. Выведите все дни, кроме субботы и воскресенья. - Создайте массив из 15 целых чисел. Используя
for, найдите и выведите первое число, которое делится на 5. - Напишите цикл
for, который считает от 100 до 0. Пропустите числа, которые делятся на 7, выведите остальные числа. - Создайте ассоциативный массив с названиями фруктов и их ценами. Используя
foreach, выведите названия фруктов, чья цена больше 50, и пропустите другие. - С помощью цикла
forнапечатайте квадрат каждого числа от 1 до 10. Если квадрат равен 36, прервите выполнение цикла. - Используя
foreach, переберите массив с числами от 1 до 30. Выведите на экран только те числа, которые не являются делителями 4.
Переходите к следующему уроку курса, а так же не забудьте посмотреть новый материал на Codebra по тегу PHP.
