2014-10-17 3 views
3

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

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 
} 

ответ

6

От PHP.net:continue:

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

От PHP.net:switch

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

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

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

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

Here's a demonstration.
К сожалению, viper-7.com, кажется вниз на некоторое время.

+0

Спасибо за ваш любезный ответ. Таким образом, вы имеете в виду, что если тип «a» и условие 1 выполняется, или если тип «b» и условие2 выполняется, оставшийся код в цикле, который вне оператора switch не будет выполнен, и перейдет к следующей итерации в петля, правильно? –

+0

Да, это так. 'continue 2' переходит непосредственно к следующей итерации цикла foreach, не выполняя никакого кода после' switch'. [Вот демонстрация.] (Http://viper-7.com/4SkL9L) – showdev

+0

Получите это. Спасибо за любезное объяснение. –

0

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

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

1

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

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 
    } 
0

продолжение и разрыв аналогичны тем, что остановка что-то произойдет.

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

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