PHP while loop: выполняйте код, пока условие истинно

PHP while повторяет блок, пока условие вычисляется в true. Условие проверяется перед каждой итерацией, поэтому тело может не выполниться ни разу, если в начале условие уже false. Используйте while, когда количество итераций зависит от условия во время выполнения, например при повторных попытках, чтении потоков или пагинации, а не от заранее известного числа.

Пример PHP while loop (счетчик повторных попыток)

Вывод:

Результат появится здесь...

Вывод:

Попытка 1
Попытка 2
Попытка 3
Попытка 4
Готово после 4 попыток

Как цикл завершается

  1. $attempt = 1 инициализирует переменную-счетчик, которая управляет остановкой цикла.
  2. while ($attempt <= $maxAttempts) проверяет условие перед каждым проходом. Когда $attempt становится больше $maxAttempts, цикл останавливается.
  3. Внутри тела $attempt++ увеличивает счетчик. Без этого обновления условие никогда не станет false, и возникнет бесконечный цикл.
  4. После выхода из цикла код после закрывающей фигурной скобки выполняется дальше, а $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Перед каждой итерациейИзвестное количество с инициализацией и инкрементом в одной строке
foreachN/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(), когда вам важна семантика внутреннего указателя.