W3docs

Цикл while в PHP

Цикл while в PHP повторяет блок кода, пока условие истинно. Узнайте синтаксис, бесконечные циклы и отличия от do...while.

Цикл while в PHP повторяет блок кода до тех пор, пока заданное условие остаётся true. Это подходящий инструмент, когда заранее неизвестно, сколько итераций потребуется — например, при чтении строк из базы данных до их исчерпания или при запросе ввода до получения корректных данных. Если количество итераций известно заранее, обычно лучше использовать цикл for.

В этой статье рассматриваются синтаксис цикла while, способ вычисления его условия, альтернативная форма с endwhile, бесконечные циклы и способы их прерывания, а также отличия while от связанного цикла do...while.

Структура цикла while

Базовая структура цикла while в PHP выглядит следующим образом:

Синтаксис цикла while в PHP

while (condition) {
  // code to be executed
}

condition — это любое выражение, которое PHP вычисляет как boolean (true или false). Цикл работает в три шага:

  1. condition вычисляется перед каждой итерацией.
  2. Если оно равно true, тело цикла выполняется один раз.
  3. PHP возвращается к шагу 1 и снова вычисляет условие.

Это важно: поскольку проверка происходит первой, тело выполняется ноль раз, если условие изначально равно false. Что-то внутри цикла (или само условие) должно в конечном счёте сделать условие false, иначе цикл будет выполняться бесконечно — см. раздел Бесконечные циклы ниже.

Альтернативный синтаксис с endwhile

PHP также предлагает форму с двоеточием и endwhile, которая удобна при смешивании циклов с HTML в шаблоне:

<?php $i = 1; ?>
<ul>
<?php while ($i <= 3): ?>
  <li>Item <?php echo $i; ?></li>
  <?php $i++; ?>
<?php endwhile; ?>
</ul>

Обе формы ведут себя одинаково; выбирайте ту, которая лучше читается в контексте.

Пример использования цикла while

Рассмотрим пример использования цикла while для вывода чисел от 1 до 10. Вот код:

Пример использования цикла while в PHP

php— editable, runs on the server

В этом примере мы инициализируем переменную $i значением 1 и задаём условие $i <= 10. Цикл продолжает выполняться, пока $i не превысит 10. На каждой итерации мы выводим значение $i и увеличиваем его на 1. Как только $i становится равным 11, условие становится false и цикл завершается. Вывод кода:

1 2 3 4 5 6 7 8 9 10

Практический пример: перебор массива

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

<?php

$fruits = ["Apple", "Banana", "Cherry"];
$i = 0;

while ($i < count($fruits)) {
  echo $fruits[$i] . "\n";
  $i++;
}

?>

Это выводит каждый фрукт на отдельной строке:

Apple
Banana
Cherry

При переборе элементов массива таким способом цикл foreach обычно является более чистым решением — он полностью устраняет необходимость в ручном счётчике. Используйте while, когда точка остановки зависит от чего-то иного, нежели известная длина (например, от наличия доступных данных).

Бесконечные циклы и выход из них

Можно создать бесконечный цикл, используя в условии цикла while выражение, которое всегда вычисляется как true. Например:

Синтаксис бесконечного цикла while в PHP

while (true) {
  // code to be executed
}

В таких случаях необходимо использовать оператор break, чтобы выйти из цикла при выполнении определённого условия. Оператор break немедленно прерывает цикл и переходит к следующему оператору после него. Вот пример:

Бесконечные циклы и выход из них

php— editable, runs on the server

В этом примере цикл выводит числа от 1 до 10, а затем останавливается. Проверка с if в сочетании с break выступает в роли реального условия выхода. Связанный оператор continue отличается: вместо выхода из цикла он пропускает оставшуюся часть текущей итерации и сразу возвращается к проверке условия.

while и do...while

Цикл while проверяет условие перед выполнением тела, поэтому тело может не выполниться ни разу. Цикл do...while является его зеркальным отображением: он проверяет условие после тела, гарантируя выполнение тела как минимум один раз.

<?php

$i = 100;

// Condition is false from the start — body never runs:
while ($i < 10) {
  echo "while: $i\n";
  $i++;
}

// Body runs once, then the condition is checked:
do {
  echo "do-while: $i\n";
  $i++;
} while ($i < 10);

?>

Вывод:

do-while: 100

Используйте do...while, когда действие должно произойти до того, как станет известно, нужно ли его повторять — например, при запросе ввода с повторным запросом только в случае некорректных данных.

Заключение

Цикл while выполняет блок кода, пока его условие остаётся true, при этом условие проверяется перед каждой итерацией. Запомните три ключевых правила безопасного использования: инициализируйте управляющую переменную перед циклом, пишите условие, которое в конечном счёте станет false, и обновляйте эту переменную (или используйте break) внутри тела. Для изучения других вариантов цикла смотрите обзор циклов PHP, управляемый счётчиком цикл for и операторы сравнения, которые используются для построения условий цикла.

Диаграмма

graph TD;
  A[While Loop Structure] --> B[Expression Evaluation];
  B --> C{Execute Code};
  C --> B;
  B --> D[False];
  D --> E[End Loop];

Практика

Практика
Каковы свойства цикла 'while' в PHP?
Каковы свойства цикла 'while' в PHP?
Was this page helpful?