W3docs

Цикл "for" в PHP

Изучите цикл for в PHP: инициализация, условие и инкремент — подсчёт, шаги, перебор массивов, вложенные циклы, break и continue.

В PHP оператор for — это управляющая конструкция, которая выполняет блок кода заранее известное количество раз. Она используется тогда, когда количество итераций фиксировано и предсказуемо: вывод чисел от 1 до 10, построение HTML-таблицы из N строк или перебор индексированного массива по позиции.

В этой главе рассматриваются три части цикла for, порядок их выполнения и практические паттерны: счёт вверх и вниз, нестандартный шаг, перебор массивов, вложенные циклы, ключевые слова break и continue.

Синтаксис

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

for (initialization; condition; increment) {
  // code to be executed on each pass
}

Три выражения выполняются в определённом порядке:

  1. Инициализация выполняется один раз перед запуском цикла — обычно задаёт начальное значение счётчика.
  2. Условие проверяется перед каждой итерацией. Пока оно равно true, тело выполняется; когда становится false, цикл завершается.
  3. Инкремент выполняется после каждой итерации, непосредственно перед следующей проверкой условия — обычно увеличивает счётчик.

Инициализация

Инициализация задаёт начальное значение счётчика. Она выполняется один раз в самом начале. Чтобы начать счёт с 1:

$counter = 1;

Условие

Условие определяет, когда остановиться. Цикл продолжает работать пока условие истинно. Чтобы цикл шёл, пока счётчик не превысит 10:

$counter <= 10;

Если условие оказывается false при первой проверке, тело цикла не выполняется ни разу.

Инкремент

Инкремент изменяет счётчик после каждого прохода, чтобы цикл рано или поздно завершился. Чтобы прибавлять 1 при каждой итерации:

$counter++;

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

Полный пример с подсчётом

Объединив три части вместе, этот цикл выводит значение $counter на каждом проходе — от 1 до 10:

php— editable, runs on the server

Приведённый код выводит:

1 2 3 4 5 6 7 8 9 10 

(Без . " " оператор echo вывел бы цифры слитно — 12345678910 — так как echo не добавляет разделителей между значениями.)

Счёт в обратном порядке и нестандартный шаг

Инкремент — это просто выражение, поэтому он может уменьшать счётчик или двигаться с шагом, отличным от 1. Чтобы считать в обратном порядке от 10 до 1, начните с большего значения, остановитесь на 1 и используйте $i--:

<?php

for ($i = 10; $i >= 1; $i--) {
  echo $i . " ";
}

?>

Чтобы двигаться с шагом 2 (вывод чётных чисел до 10), используйте $i += 2:

<?php

for ($i = 2; $i <= 10; $i += 2) {
  echo $i . " ";   // 2 4 6 8 10
}

?>

Перебор массива

Цикл for позволяет обходить индексированный array по позиции. В условии используется count(), чтобы узнать количество элементов, а $i служит индексом массива:

php— editable, runs on the server

Приведённый код выводит:

apple
banana
cherry

Обратите внимание: цикл начинается с 0 (массивы в PHP индексируются с нуля), а условие — $i < count($fruits), то есть < вместо <=, потому что последний допустимый индекс равен count - 1.

Для массивов — особенно ассоциативных, где ключи не являются последовательными целыми числами — цикл foreach обычно понятнее и безопаснее, чем for, поскольку не требует управления индексом вручную.

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

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

<?php

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

?>

Этот код выводит таблицу умножения 3×3:

1	2	3	
2	4	6	
3	6	9	

Прерывание и пропуск итераций

Два ключевых слова дают более тонкий контроль внутри тела цикла:

  • break немедленно останавливает цикл и продолжает выполнение кода после него.
  • continue пропускает остаток текущей итерации и переходит к следующей (инкремент при этом всё равно выполняется).
<?php

for ($i = 1; $i <= 10; $i++) {
  if ($i == 4) {
    continue;   // skip 4
  }
  if ($i == 7) {
    break;      // stop entirely at 7
  }
  echo $i . " ";
}

?>

Приведённый код выводит:

1 2 3 5 6 

4 пропускается благодаря continue, а цикл останавливается до вывода 7 из-за break. Подробнее читайте в главе break и continue.

Когда использовать for, а когда другие циклы

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

Заключение

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

Практика

Практика
Каков порядок трёх выражений цикла for в PHP?
Каков порядок трёх выражений цикла for в PHP?
Was this page helpful?