W3docs

Циклы PHP и оператор break

Операторы break и continue в PHP позволяют управлять выполнением циклов: прерывать их досрочно или пропускать итерации.

Когда вы пишете цикл в PHP, вам часто нужен более тонкий контроль, чем просто «выполнить каждую итерацию». Два оператора дают такой контроль: break досрочно завершает цикл, а continue пропускает оставшуюся часть текущей итерации. На этой странице рассматриваются оба оператора, включая их применение во вложенных циклах с помощью break N и continue N.

Понимание оператора break

Оператор break немедленно завершает текущий цикл (или switch) и передаёт управление первому оператору после цикла. Используйте его, когда вы нашли то, что искали, или когда продолжение было бы бессмысленным или небезопасным — например, после обнаружения совпадающей записи или при возникновении ошибки.

break работает внутри циклов for, foreach, while и do...while, а также внутри оператора switch.

Примечание: Использование break за пределами цикла или оператора switch вызывает фатальную ошибку в PHP.

Использование оператора break в цикле for

В цикле for оператор break позволяет остановить цикл при выполнении определённого условия. Например, следующий код использует цикл for для поиска числа в array:

Пример PHP: break в цикле for

php— editable, runs on the server

В этом коде цикл остановится, как только значение $numbers[$i] станет равным 3. Вывод этого кода будет "Found 3 at index 2".

Использование оператора break в цикле foreach

В цикле foreach оператор break работает аналогично циклу for. Следующий код использует цикл foreach для поиска конкретного значения в ассоциативном array:

Пример PHP: break в цикле foreach

php— editable, runs on the server

В этом коде цикл остановится, как только ключ $color станет равным "green". Вывод этого кода будет "green has hex code #00FF00".

Выход из вложенных циклов

Оператор break также можно использовать для выхода из вложенных циклов. Когда оператор break используется внутри вложенного цикла, завершается только самый внутренний цикл.

Например, следующий код использует два вложенных цикла для поиска конкретного значения в двумерном array:

Пример PHP: break во вложенных циклах

php— editable, runs on the server

В этом коде оператор break 2 используется для выхода из двух уровней вложенности. Вывод этого кода будет Found 5 at [1][1].

Число после break — это количество уровней вложенности, из которых нужно выйти, а не индекс цикла. break 1 эквивалентен простому break, и число не может быть больше фактической глубины вложенности.

Понимание оператора continue

Там, где break полностью выходит из цикла, continue только пропускает оставшуюся часть текущей итерации и сразу переходит к следующей. Сам цикл продолжает выполняться. Это естественный выбор, когда нужно проигнорировать некоторые элементы, но всё равно обработать все остальные.

Следующий цикл выводит все числа от 1 до 10, кроме чётных:

Пример PHP: continue в цикле for

<?php

for ($i = 1; $i <= 10; $i++) {
    if ($i % 2 == 0) {
        continue; // skip even numbers
    }
    echo "$i ";
}

?>

Вывод: 1 3 5 7 9 — когда $i чётное, continue пропускает echo, и цикл переходит к следующему значению.

Continue в цикле foreach

continue особенно удобен в цикле foreach, когда нужно фильтровать элементы по ходу перебора. Здесь мы пропускаем любой товар, которого нет в наличии:

Пример PHP: continue в цикле foreach

<?php

$products = array(
    array("name" => "Pen",      "stock" => 12),
    array("name" => "Notebook", "stock" => 0),
    array("name" => "Eraser",   "stock" => 5),
);

foreach ($products as $product) {
    if ($product["stock"] === 0) {
        continue; // don't list sold-out items
    }
    echo $product["name"] . " (" . $product["stock"] . " in stock)\n";
}

?>

Этот код выводит Pen и Eraser, пропуская отсутствующий в наличии Notebook.

Пропуск нескольких уровней с помощью continue N

Аналогично break N, оператор continue N переходит к следующей итерации внешнего цикла. Например, continue 2 перезапускает цикл на один уровень выше:

Пример PHP: continue 2 во вложенных циклах

<?php

for ($i = 1; $i <= 3; $i++) {
    for ($j = 1; $j <= 3; $j++) {
        if ($j == 2) {
            continue 2; // jump to the next $i
        }
        echo "i=$i j=$j\n";
    }
}

?>

Внутренний цикл всегда выводит только j=1, потому что при достижении j == 2 перезапускается внешний цикл. Вывод: i=1 j=1, i=2 j=1, i=3 j=1.

Break и Continue: сравнение

ОператорДействие
breakПолностью останавливает цикл; выполнение продолжается после цикла.
continueПропускает оставшуюся часть текущей итерации; цикл продолжается.
break NВыходит сразу из N вложенных циклов.
continue NПереходит к следующей итерации цикла на N уровней выше.

Частые ошибки

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

Заключение

Операторы break и continue дают точный контроль над выполнением цикла: break досрочно завершает цикл, а continue пропускает итерацию и продолжает выполнение. Формы break N и continue N расширяют этот контроль на вложенные циклы. Далее изучите, как работают различные типы цикловfor, foreach, while и do...while.

Практика

Практика
Какова основная функция операторов 'break' и 'continue' в PHP?
Какова основная функция операторов 'break' и 'continue' в PHP?
Was this page helpful?