Циклы
Цикл повторяет один и тот же код несколько раз. Он нужен, когда надо обработать список товаров, вывести строки таблицы или посчитать сумму — без цикла пришлось бы копировать код вручную.
while
Цикл while повторяет блок, пока условие истинно. Условие проверяется перед каждым повторением:
<?php
$i = 1;
while ($i <= 3) {
echo $i, "\n";
$i++;
}Переменная $i называется счётчиком. Внутри цикла её обязательно нужно менять, иначе условие никогда не станет ложным.
for
Когда число повторений известно заранее, удобнее for. В скобках через точку с запятой записаны три части: начальное значение, условие и шаг:
<?php
for ($i = 1; $i <= 3; $i++) {
echo "Шаг $i\n";
}Этот цикл делает то же, что и предыдущий while, но всё управление счётчиком собрано в одной строке.
foreach
Цикл foreach перебирает элементы массива по одному. На каждом шаге очередной элемент попадает в переменную:
<?php
$fruits = ['яблоко', 'груша', 'слива'];
foreach ($fruits as $fruit) {
echo $fruit, "\n";
}Счётчик здесь не нужен: цикл сам закончится, когда элементы кончатся. Подробнее о массивах — в следующей главе.
Накопление результата
Частый приём — завести переменную до цикла и менять её на каждом шаге:
<?php
$sum = 0;
for ($i = 1; $i <= 5; $i++) {
$sum += $i;
}
echo $sum; // 15break и continue
break прекращает цикл досрочно, а continue пропускает остаток текущего шага и переходит к следующему:
<?php
for ($i = 1; $i <= 10; $i++) {
if ($i % 2 === 0) {
continue;
}
if ($i > 7) {
break;
}
echo $i, ' ';
}
// 1 3 5 7Чётные числа пропускаются, а на девятке цикл останавливается.
Частая ошибка
Если забыть изменить счётчик, получится бесконечный цикл: условие всегда истинно, и программа не остановится сама. На этом сайте такой код прервётся через 5 секунд, а на настоящем сервере может надолго занять процессор.