продолжить 2 и перерыв в операторе switch

Я новичок в PHP и видел код ниже в Интернете. Она имеет continue 2 а также break вместе в switch/case заявление. Что это значит?

foreach ( $elements as &$element ) {

switch ($element['type']) {
case a :
if (condition1)
continue 2;
break;

case b :
if (condition2)
continue 2;
break;
}

// remaining code here, inside loop but outside switch statement
}

10

Решение

От PHP.net:continue:

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

От PHP.net:switch

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

PHP продолжает выполнять операторы до конца переключения
блок или первый раз, когда он видит оператор break. Если ты не пишешь
оператор break в конце списка операторов case, PHP пойдет
по исполнению заявления следующего дела.

Объяснение: continue 2 переходит к следующей итерации цикла на 2 уровня назад, который является foreach, break (эквивалентно break 1) завершает текущий цикл, который является switch,

По-английски: Для каждого $elementесли тип «а» и condition1 встречается или если тип «б» и condition2 встречено, переходите к следующему $element и игнорировать остальные параметры переключателя. В противном случае перейдите к следующему параметру переключения или, если это последний параметр переключения, выполните любой код после переключателя.

Вот демонстрация.
Извините, на данный момент viper-7.com не работает.

13

Другие решения

ИМХО, разница в том, если у вас есть код после переключателя и до конца цикла.

    foreach ( $elements as &$element ) {
switch ($element['type']) {
case a :
if (condition1)
continue 2;
break;

case b :
if (condition2)
continue 2;
break;
}
// The code here will be reached if break but not if continue 2
}
2

Продолжение и разрыв похожи в том, что остановит что-то происходящее.

в случае продолжения он остановит что-либо после фигурных скобок, но не остановит цикл. Оператор switch просто выходит из этого оператора и переходит к следующему.

В случае разрыва он остановит продолжение всего цикла, завершит цикл там.

1

continue принимает необязательный числовой аргумент, который сообщает, сколько уровней замкнутых циклов следует пропустить до конца. Значение по умолчанию равно 1, что позволяет перейти к концу текущего цикла.

Источник: http://php.net/manual/en/control-structures.continue.php

0
По вопросам рекламы [email protected]