Техники циклов в 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
}- Инициализатор выполняется один раз перед началом цикла — обычно для установки счётчика.
- Условие проверяется перед каждой итерацией. Цикл продолжается, пока оно
true, и останавливается, как только становитсяfalse. - Обновление выполняется после каждой итерации — обычно для увеличения счётчика.
Здесь $i начинается с 0, тело выполняется, пока $i < 10, а $i++ увеличивает значение после каждого прохода. Цикл выводит The number is 0 по The number is 9 — десять строк. Обратите внимание: он останавливается на 9, а не на 10, потому что условие $i < 10 уже ложно, когда $i достигает 10. Операторы отношения (<, ++), используемые здесь, рассматриваются в разделе операторы PHP.
Цикл while
Цикл while повторяется, пока его условие истинно. Используйте его, когда количество итераций не фиксировано заранее — например, при чтении до конца файла.
Этот код выводит те же десять строк, что и пример с for. Разница сугубо стилистическая: при использовании while вы управляете счётчиком самостоятельно ($i = 0 перед циклом, $i++ внутри него). Если забыть $i++, условие будет оставаться истинным вечно — возникнет бесконечный цикл, наиболее распространённая ошибка при работе с циклами.
Цикл do-while
Цикл do...while похож на while, но проверяет условие после выполнения тела. Это означает, что тело всегда выполняется хотя бы один раз, даже если условие с самого начала ложно.
Этот код также выводит от 0 до 9. Поведение «хотя бы один раз» важно, когда условие зависит от того, что производит тело цикла — например, при запросе ввода у пользователя с повтором только в случае некорректного ввода. Обратите внимание на точку с запятой после while (...); здесь она обязательна.
Цикл foreach
Цикл foreach проходит по каждому элементу массива по одному за раз. Это самый чистый способ перебора коллекции, поскольку вам не нужно управлять индексом вручную.
Простейшая форма возвращает каждое значение:
На каждом проходе $value содержит следующий элемент, поэтому код выводит Red, Green, затем Blue.
Для ассоциативных массивов используйте форму $key => $value, чтобы читать и ключ, и значение:
Этот код выводит Peter is 32, Quagmire is 30 и Joe is 34. foreach сохраняет порядок вставки, поэтому элементы выводятся в том порядке, в котором они были определены.
Управление циклом: break и continue
Иногда нужно прервать цикл досрочно или пропустить один проход. Для этого служат break и continue, которые работают в любом типе цикла.
Оператор break в PHP
Оператор break немедленно останавливает цикл и переходит к коду после него.
Когда $i достигает 5, break завершает цикл, поэтому выводятся только Number: 0 по Number: 4.
Оператор continue в PHP
Оператор continue пропускает оставшуюся часть текущей итерации и сразу переходит к следующей — сам цикл продолжается.
Здесь 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 и функциями для построения полноценных программ.