W3docs

while

Ключевое слово "while" в PHP создаёт цикл, который выполняет блок кода снова и снова, пока условие остаётся истинным.

Цикл while в PHP

Цикл while — простейший цикл в PHP. Он выполняет блок кода снова и снова пока условие остаётся истинным и останавливается, как только условие становится ложным. Используйте его, когда заранее неизвестно количество итераций — например, при чтении строк из базы данных до их исчерпания или при повторных попытках выполнить операцию до успешного завершения.

На этой странице рассматривается синтаксис while, альтернативная форма с endwhile, отличия while от do...while, а также самая распространённая ошибка — бесконечный цикл — и способы её избежать.

Синтаксис

while (condition) {
  // Code to be executed while the condition is true
}

Условие вычисляется перед каждой итерацией:

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

Поскольку проверка происходит первой, тело может выполниться ноль раз — если условие уже ложно при первой проверке, тело цикла полностью пропускается.

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

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

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

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

Использование

Ключевое слово while широко применяется в PHP для создания циклов, повторяющих блок кода до выполнения определённого условия. Например, цикл while можно использовать для перебора элементов массива:

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

php— editable, runs on the server

В этом примере цикл while используется для перебора элементов массива $myArray. Переменная $i отслеживает текущий индекс в массиве, и цикл продолжает выполняться, пока $i меньше количества элементов массива. Внутри цикла оператор echo выводит текущий элемент массива, а затем $i увеличивается на единицу для перехода к следующему элементу.

Примеры

Ниже приведено ещё несколько примеров использования цикла while в PHP.

Пример 1: Генерация случайного числа до выполнения условия

php— editable, runs on the server

В этом примере цикл while используется для генерации случайных чисел до тех пор, пока не получится число, большее или равное 10. Внутри цикла случайное число генерируется функцией rand() и выводится оператором echo. Генерация продолжается, пока не будет получено число, большее или равное 10.

Пример 2: Перебор результирующего набора базы данных

Перебор результирующего набора базы данных в PHP

<?php

$query = "SELECT * FROM my_table";
$result = mysqli_query($conn, $query);

while ($row = mysqli_fetch_assoc($result)) {
  echo $row['column_name'] . "<br>";
}

В этом примере цикл while используется для перебора результирующего набора, возвращённого запросом к базе данных. Функция mysqli_fetch_assoc() возвращает следующую строку в виде ассоциативного массива или false, когда строк больше нет — таким образом цикл автоматически завершается после исчерпания результирующего набора. Это работает потому, что присваивание $row = mysqli_fetch_assoc($result) вычисляется как присвоенное значение, а false завершает цикл.

Как избежать бесконечного цикла

Самая распространённая ошибка при использовании while — забыть изменить переменную, от которой зависит условие. Если условие никогда не становится ложным, цикл выполняется бесконечно и зависает скрипт:

<?php

$i = 0;

// Bug: $i is never incremented, so $i < 5 stays true forever.
while ($i < 5) {
  echo "running...\n";
  // $i++;  <-- this line is missing
}

Всегда следите за тем, чтобы внутри цикла что-то двигало условие к false. Также можно досрочно выйти из цикла с помощью break или пропустить остаток текущей итерации с помощью continue.

while vs do...while

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

<?php

$i = 10;

// Condition is false from the start, so this prints nothing.
while ($i < 5) {
  echo "while: $i\n";
  $i++;
}

// do...while runs the body once before checking, so it prints "do-while: 10".
do {
  echo "do-while: $i\n";
  $i++;
} while ($i < 5);

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

Заключение

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

Чтобы изучить другие способы повторения кода в PHP, смотрите цикл for (лучший вариант, когда количество итераций известно) и цикл foreach (лучший вариант для перебора массивов). Для общего сравнения всех циклов читайте обзор циклов PHP.

Практика

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