Циклы в PHP: for, while, foreach
Циклы позволяют выполнять один и тот же код много раз: вывести список товаров, обработать строки файла, посчитать сумму заказа. В PHP четыре цикла — for, while, do...while и foreach. Разберём каждый на примерах.
Цикл for
for используют, когда заранее известно число повторений. В круглых скобках три выражения через точку с запятой: начальное значение счётчика, условие продолжения и шаг:
<?php
for ($i = 1; $i <= 5; $i++) {
echo "Шаг $i\n";
}
// Вывод:
// Шаг 1
// Шаг 2
// Шаг 3
// Шаг 4
// Шаг 5
Как это читается: «начни с $i = 1; пока $i <= 5 — выполняй тело; после каждого прохода увеличивай $i на 1». Оператор $i++ — короткая запись $i = $i + 1.
Счётчик может меняться как угодно — например, идти в обратную сторону или через два:
<?php
for ($i = 10; $i > 0; $i -= 2) {
echo $i . " ";
}
// Вывод: 10 8 6 4 2
Цикл while
while повторяет тело, пока условие истинно. Его выбирают, когда число повторений заранее неизвестно:
<?php
$balance = 100;
$day = 0;
while ($balance > 0) {
$balance -= 30; // ежедневные расходы
$day++;
}
echo "Деньги закончились на день $day"; // Вывод: Деньги закончились на день 4
Внимательно следите, чтобы условие когда-нибудь стало ложным, иначе получится бесконечный цикл и скрипт зависнет.
do...while
Разновидность while, у которой тело выполняется минимум один раз — условие проверяется после прохода:
<?php
$attempts = 0;
do {
$attempts++;
echo "Попытка $attempts\n";
} while ($attempts < 3);
// Вывод:
// Попытка 1
// Попытка 2
// Попытка 3
Цикл foreach
foreach создан специально для массивов: он перебирает элементы по очереди без всяких счётчиков. В веб-разработке это самый используемый цикл:
<?php
$languages = ["PHP", "JavaScript", "Python"];
foreach ($languages as $language) {
echo "Изучаю $language\n";
}
// Вывод:
// Изучаю PHP
// Изучаю JavaScript
// Изучаю Python
Если нужны не только значения, но и ключи, используется форма as $key => $value:
<?php
$prices = [
"хлеб" => 45,
"молоко" => 80,
"сыр" => 350,
];
foreach ($prices as $product => $price) {
echo "$product — $price руб.\n";
}
// Вывод:
// хлеб — 45 руб.
// молоко — 80 руб.
// сыр — 350 руб.
break и continue
Двумя ключевыми словами можно управлять ходом любого цикла:
break— немедленно выйти из цикла;continue— пропустить текущую итерацию и перейти к следующей.
<?php
for ($i = 1; $i <= 10; $i++) {
if ($i % 2 !== 0) {
continue; // пропускаем нечётные
}
if ($i > 6) {
break; // дальше не идём
}
echo $i . " ";
}
// Вывод: 2 4 6
Здесь % — остаток от деления: у чётных чисел остаток от деления на 2 равен нулю.
Практический пример: сумма заказа
Соберём всё вместе — посчитаем стоимость корзины и применим скидку:
<?php
$cart = [
"Клавиатура" => 2500,
"Мышь" => 1200,
"Коврик" => 400,
];
$total = 0;
foreach ($cart as $item => $price) {
$total += $price;
echo "$item: $price руб.\n";
}
if ($total > 3000) {
$total *= 0.9; // скидка 10%
}
echo "Итого со скидкой: $total руб.";
// Вывод:
// Клавиатура: 2500 руб.
// Мышь: 1200 руб.
// Коврик: 400 руб.
// Итого со скидкой: 3690 руб.
Какой цикл выбрать
| Ситуация | Цикл |
|---|---|
| Известно точное число повторений | for |
| Повторять, пока выполняется условие | while |
| Выполнить хотя бы один раз, потом проверять | do...while |
| Перебрать массив | foreach |
Что мы узнали
forподходит, когда число итераций известно заранее: счётчик, условие, шаг.whileкрутится, пока условие истинно;do...whileгарантирует хотя бы один проход.foreach— главный цикл для массивов, умеет отдавать и ключи, и значения.breakпрерывает цикл,continueпропускает итерацию.- Бесконечный цикл — частая ошибка: проверяйте, что условие выхода достижимо.
Закрепите практикой
Задачи с автоматической проверкой — решайте прямо здесь, не уходя из учебника.