Continue 2 и break in switch statement

Я новичок в 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
}

Ответ 1

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

Поведение в коде, который вы показали:

Цикл по $elements. Если $element имеет тип "a" и condition1 выполнено или если он имеет тип "b" и condition2 выполнено, перейдите к следующему $element. В противном случае выполните некоторое действие, прежде чем переходить к следующему $element.


С PHP.net: продолжение:

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

С PHP.net:switch

PHP продолжает выполнять операторы до конца блока switch или до того момента, когда он впервые увидит оператор break.

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

Ответ 2

IMHO, разница в том, что у вас есть код после коммутатора и до конца цикла.

    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
    }

Ответ 3

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

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

Ответ 4

continue и break аналогичны тем, что перестают что-то происходить.

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

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