Циклы — основа любого кода: они повторяют действия, чтобы не писать одно и то же вручную. В PHP несколько видов циклов; разберём, какой когда использовать, на понятных примерах.
Цикл for — когда известно число повторов
Используется, когда вы знаете, сколько раз повторить:
for ($i = 1; $i <= 5; $i++) {
echo $i; // выведет 1 2 3 4 5
}
Три части: начальное значение, условие продолжения и шаг. Классика для перебора по счётчику.
Цикл foreach — для массивов
Самый частый в PHP: перебирает элементы массива без счётчика:
$fruits = ['яблоко', 'банан', 'груша'];
foreach ($fruits as $fruit) {
echo $fruit;
}
Удобно и безопасно проходит по всем элементам. Для ключей и значений: foreach ($arr as $key => $value).
foreach (почти всегда именно он). Нужно повторить действие фиксированное число раз — for. Повторяете, пока выполняется условие, и число заранее неизвестно — while.Цикл while — пока условие истинно
$n = 1;
while ($n <= 5) {
echo $n;
$n++; // важно менять условие, иначе цикл вечный
}
Подходит, когда неизвестно заранее, сколько будет повторов — например, чтение данных, пока они есть.
Главная опасность — бесконечный цикл
Если условие никогда не станет ложным (забыли увеличить счётчик), цикл будет крутиться вечно и «повесит» скрипт. Всегда следите, чтобы внутри цикла что-то приближало его к завершению. Это самая частая ошибка с while.
Частые ошибки
- Забывают менять условие в
while— получают бесконечный цикл. - Используют
forсо счётчиком там, где прощеforeach. - Выходят за границы массива, перебирая по индексу вручную.
Что запомнить
Для перебора массивов используйте foreach — в PHP он основной. Для фиксированного числа повторов — for, для повторов по условию с неизвестным числом итераций — while. Главное — следить, чтобы цикл мог завершиться, иначе получите бесконечный цикл, который повесит скрипт.
Коротко: вопросы и ответы
Какой цикл выбрать для массива? foreach — он создан именно для этого.
Чем for отличается от while? for удобен при известном числе повторов, while — когда оно заранее неизвестно.
Почему скрипт завис? Вероятно, бесконечный цикл — условие никогда не становится ложным.
Управление циклом: break и continue
break досрочно выходит из цикла (нашли нужное — дальше искать незачем), а continue пропускает текущую итерацию и переходит к следующей (например, пропустить пустые значения):
foreach ($items as $item) {
if ($item == '') continue; // пропустить пустое
if ($item == 'stop') break; // выйти из цикла
echo $item;
}
Есть ли ещё циклы? Да, do...while похож на while, но выполняет тело хотя бы один раз (условие проверяется в конце).
Как перебрать массив с ключами? foreach ($arr as $key => $value) даёт и ключ, и значение.
Небольшой совет по производительности
Не выполняйте внутри цикла тяжёлые операции, которые можно сделать один раз до него, — например, повторный запрос к базе на каждой итерации. Готовьте данные заранее, а в цикле только перебирайте их. Это частая причина «тормозящих» скриптов на больших массивах.
Что быстрее — for или foreach? Для массивов разница обычно несущественна; выбирайте по читаемости, а foreach ещё и безопаснее от выхода за границы.
Комментарии