PHP while loop: выполняйте код, пока условие истинно
PHP while повторяет блок, пока условие вычисляется в true. Условие проверяется перед каждой итерацией, поэтому тело может не выполниться ни разу, если в начале условие уже false. Используйте while, когда количество итераций зависит от условия во время выполнения, например при повторных попытках, чтении потоков или пагинации, а не от заранее известного числа.
Пример PHP while loop (счетчик повторных попыток)
Вывод:
Результат появится здесь...
Вывод:
Попытка 1
Попытка 2
Попытка 3
Попытка 4
Готово после 4 попыток
Как цикл завершается
$attempt = 1инициализирует переменную-счетчик, которая управляет остановкой цикла.while ($attempt <= $maxAttempts)проверяет условие перед каждым проходом. Когда$attemptстановится больше$maxAttempts, цикл останавливается.- Внутри тела
$attempt++увеличивает счетчик. Без этого обновления условие никогда не станетfalse, и возникнет бесконечный цикл. - После выхода из цикла код после закрывающей фигурной скобки выполняется дальше, а
$attemptостается в области видимости и равен 5.
Частые ошибки в PHP while loop
Забыть изменить состояние условия
Неправильно:
$i = 0;
while ($i < 3) {
echo "$i\n";
// отсутствует $i++ — бесконечный цикл
}
Правильно:
$i = 0;
while ($i < 3) {
echo "$i\n";
$i++;
}
Использовать = вместо === в условии
Неправильно:
$isReady = false;
while ($isReady = true) { // присваивает true (всегда truthy)
break; // в этом демо предотвращает бесконечный цикл
}
Правильно:
$isReady = false;
while ($isReady === true) {
// ...
}
Выражение присваивания вычисляется в присвоенное значение, поэтому условие может оставаться истинным бесконечно. Присваивание в условии уместно только в намеренных случаях, когда вы одновременно получаете результат функции (например, в циклах чтения).
PHP while vs do-while vs for
Используйте цикл PHP do while (do...while), когда тело должно выполниться хотя бы один раз.
| Цикл | Проверка условия | Лучше всего подходит для |
|---|---|---|
while | Перед каждой итерацией | Неизвестное число итераций, может не выполниться ни разу |
do...while | После каждой итерации | Должен выполниться минимум один раз (валидация ввода, меню) |
for | Перед каждой итерацией | Известное количество с инициализацией и инкрементом в одной строке |
foreach | N/A (обходит коллекцию) | Массивы и объекты Traversable |
Используйте while для рабочих процессов, управляемых условием. Переходите на for, когда у цикла фиксированный диапазон, и на foreach, когда обходите массив или итерируемый объект.
Что такое PHP while loop?
PHP while loop — это цикл с проверкой условия на входе, который вычисляет boolean-выражение перед каждой итерацией. Если выражение равно true, выполняется тело цикла; если false, управление переходит за закрывающую фигурную скобку. PHP также поддерживает альтернативный синтаксис while (condition): ... endwhile;, который часто используют в шаблонах, где фигурные скобки читать сложнее.
Дополнительные примеры
Повторные попытки до успеха с ограничением по числу итераций:
$success = false;
$tries = 0;
while (!$success && $tries < 5) {
$tries++;
$success = ($tries === 3); // имитация успеха на 3-й попытке
}
echo "Успешно после $tries попыток";
Комбинация двух условий предотвращает неограниченные повторные попытки. Всегда ограничивайте retry-циклы максимальным числом итераций, чтобы избежать поведения, похожего на отказ в обслуживании, при временных сбоях.
Использование do...while, чтобы гарантировать хотя бы один запуск:
$input = '';
do {
$input = 'валидно'; // имитация пользовательского ввода
} while ($input === '');
echo $input;
do...while проверяет условие после первого прохода, поэтому тело всегда выполняется минимум один раз. Это полезно для запросов ввода и циклов меню.
FAQ
Как остановить while loop в PHP?
Используйте break, чтобы немедленно выйти из цикла, или измените переменную условия так, чтобы проверка стала false. break 2 выходит сразу из двух уровней вложенности. Не полагайтесь только на break для штатного завершения: обновляйте условие, чтобы намерение цикла оставалось очевидным.
Выполняется ли PHP while loop, если условие false?
Нет. while — это цикл с проверкой на входе: если условие при первой проверке вычисляется в false, тело не выполнится ни разу. Используйте do...while, когда тело должно отработать хотя бы один раз независимо от начального условия. Разница важна, когда «ноль итераций» — корректный результат (пустая выборка, неудачное чтение, ноль попыток).
Можно ли обходить массивы через while в PHP?
Да, но избегайте each() (удалена в PHP 8). Для массивов идиоматичный выбор — foreach. Если нужен именно while, отслеживайте индекс и увеличивайте его или используйте current()/next(), когда вам важна семантика внутреннего указателя.