2014-10-17 95 views
3

我是PHP新手,在线看到下面的代码。它有continue 2break一起在switch/case声明。这是什么意思?继续2并打开switch语句

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

如果在循环中有一个switch并希望继续到下一个 迭代外环的,使用2继续

PHP继续执行语句,直到交换机 块的结尾,或第一次它看到一个突破声明。如果您在案例陈述清单末尾没有写入 中断陈述,则执行以下案例的陈述时,PHP将执行 。

说明:continue 2跳转到环路的在2个水平恢复的下一次迭代,这是foreachbreak(相当于break 1)结束当前循环,即switch

英文:对于每个$element,如果类型是“a”和condition1被满足或如果类型是“b”和condition2被满足,继续到下一个$element和忽略的开关选项的其余部分。否则,请继续执行下一个开关选项,或者如果这是最后一个开关选项,请在开关后执行任何代码。

Here's a demonstration.
对不起,viper-7.com似乎是下降暂且。

+0

谢谢你的回答。所以,你的意思是,如果类型是“a”并满足条件1,或者如果类型是“b”并满足条件2,那么外部switch语句中的其余代码将不会被执行,并将跳转到下一次迭代循环,对吗? – 2014-10-17 18:35:53

+0

是的,没错。 'continue 2'直接跳到'foreach'循环的下一次迭代,而不执行'switch'后面的任何代码。 [这里有一个演示。](http://viper-7.com/4SkL9L) – showdev 2014-10-17 18:57:17

+0

得到它。感谢您的亲切解释。 – 2014-10-17 19:06:15

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语句刚刚脱离这个语句并继续下一个语句。

如果发生中断,它将停止整个循环继续,结束循环。