W3docs

Техники циклов в PHP: Полное руководство

Циклы PHP: for, while, do-while и foreach с примерами, break и continue, вложенные циклы и советы по выбору правильного цикла.

Циклы позволяют выполнять один и тот же блок кода снова и снова, без копирования и вставки. Вместо того чтобы писать десять операторов echo, вы пишете один и указываете PHP повторить его десять раз. Практически любая реальная программа использует циклы: строки из базы данных, товары в корзине, строки файла или числа в диапазоне.

PHP предоставляет четыре конструкции цикла:

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

На этой странице рассмотрен синтаксис каждого цикла, управление циклами с помощью break и continue, вложенные циклы и советы по выбору подходящего.

Цикл for

Цикл for повторяет блок известное количество раз. Заголовок состоит из трёх частей, разделённых точкой с запятой:

for (initializer; condition; update) {
  // body
}
  1. Инициализатор выполняется один раз перед началом цикла — обычно для установки счётчика.
  2. Условие проверяется перед каждой итерацией. Цикл продолжается, пока оно true, и останавливается, как только становится false.
  3. Обновление выполняется после каждой итерации — обычно для увеличения счётчика.
php— editable, runs on the server

Здесь $i начинается с 0, тело выполняется, пока $i < 10, а $i++ увеличивает значение после каждого прохода. Цикл выводит The number is 0 по The number is 9 — десять строк. Обратите внимание: он останавливается на 9, а не на 10, потому что условие $i < 10 уже ложно, когда $i достигает 10. Операторы отношения (<, ++), используемые здесь, рассматриваются в разделе операторы PHP.

Цикл while

Цикл while повторяется, пока его условие истинно. Используйте его, когда количество итераций не фиксировано заранее — например, при чтении до конца файла.

php— editable, runs on the server

Этот код выводит те же десять строк, что и пример с for. Разница сугубо стилистическая: при использовании while вы управляете счётчиком самостоятельно ($i = 0 перед циклом, $i++ внутри него). Если забыть $i++, условие будет оставаться истинным вечно — возникнет бесконечный цикл, наиболее распространённая ошибка при работе с циклами.

Цикл do-while

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

php— editable, runs on the server

Этот код также выводит от 0 до 9. Поведение «хотя бы один раз» важно, когда условие зависит от того, что производит тело цикла — например, при запросе ввода у пользователя с повтором только в случае некорректного ввода. Обратите внимание на точку с запятой после while (...); здесь она обязательна.

Цикл foreach

Цикл foreach проходит по каждому элементу массива по одному за раз. Это самый чистый способ перебора коллекции, поскольку вам не нужно управлять индексом вручную.

Простейшая форма возвращает каждое значение:

php— editable, runs on the server

На каждом проходе $value содержит следующий элемент, поэтому код выводит Red, Green, затем Blue.

Для ассоциативных массивов используйте форму $key => $value, чтобы читать и ключ, и значение:

php— editable, runs on the server

Этот код выводит Peter is 32, Quagmire is 30 и Joe is 34. foreach сохраняет порядок вставки, поэтому элементы выводятся в том порядке, в котором они были определены.

Управление циклом: break и continue

Иногда нужно прервать цикл досрочно или пропустить один проход. Для этого служат break и continue, которые работают в любом типе цикла.

Оператор break в PHP

Оператор break немедленно останавливает цикл и переходит к коду после него.

php— editable, runs on the server

Когда $i достигает 5, break завершает цикл, поэтому выводятся только Number: 0 по Number: 4.

Оператор continue в PHP

Оператор continue пропускает оставшуюся часть текущей итерации и сразу переходит к следующей — сам цикл продолжается.

php— editable, runs on the server

Здесь continue пропускает итерацию, где $i == 5, поэтому выводятся все числа кроме 5: Number: 0 по Number: 4, затем Number: 6 по Number: 9.

Вложенные циклы

Один цикл можно поместить внутрь другого. Внутренний цикл выполняется полностью при каждом проходе внешнего. Так строятся сетки, таблицы и таблицы умножения.

<?php

for ($row = 1; $row <= 3; $row++) {
  for ($col = 1; $col <= 3; $col++) {
    echo $row * $col . "\t";
  }
  echo "\n";
}

?>

Внешний цикл выполняется три раза (по одному на строку); для каждой строки внутренний цикл выполняется три раза (по одному на столбец), выводя таблицу умножения 3×3. Обратите внимание: во вложенном цикле break и continue влияют только на тот цикл, в котором они находятся. Чтобы выйти сразу из нескольких уровней, можно передать число: break 2; выходит из двух циклов.

Какой цикл выбрать?

СитуацияЛучший выбор
Известно количество итераций или нужен счётчикfor
Повтор по условию, количество итераций неизвестноwhile
Как while, но тело должно выполниться хотя бы один разdo...while
Обработка каждого элемента массиваforeach

При работе с массивами отдавайте предпочтение foreach — он наиболее читаем и наименее подвержен ошибкам, поскольку нет индекса для управления и нет риска выйти за пределы массива.

Заключение

Четыре цикла PHP охватывают все шаблоны повторения: for — для счётных циклов, while и do...while — для циклов на основе условий, foreach — для массивов. Комбинируйте их с break и continue для управления потоком выполнения, а вложенные циклы используйте для работы с сетками и таблицами. Освоив циклы, сочетайте их с условными операторами, оператором switch и функциями для построения полноценных программ.

Практика

Практика
Какие из следующих типов циклов существуют в PHP?
Какие из следующих типов циклов существуют в PHP?
Was this page helpful?