在switch语句中使用continue 2和break的含义是什么?

47

我是PHP的新手,在网上看到下面的代码。在switch/case语句中同时使用了continue 2break。这是什么意思?

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
}
3个回答

72

continue 2直接跳到两层外的结构的下一次迭代,即foreach。而break(等同于break 1)仅结束switch语句。

你展示的代码行为是:

循环遍历$ elements。如果一个$element是类型"a"且满足condition1,或者如果它是类型"b"且满足condition2,则跳到下一个$element。否则,在移动到下一个$element之前执行某些操作。


来自PHP.net:continue

  

continue接受一个可选的数字参数,告诉它应该跳过多少个封闭循环以结束。默认值为1,因此跳过当前循环的末尾。

来自PHP.net:switch

  

PHP将继续执行语句,直到switch块的结尾,或者第一次看到一个break语句。


  

如果您在循环内部有一个switch并希望继续到外部循环的下一次迭代,请使用continue 2。


感谢您的友好回答。那么,您的意思是,如果类型为“a”且满足条件1,或者类型为“b”且满足条件2,则在switch语句之外的循环中剩余的代码将不会被执行,并且会跳到下一个迭代,对吗? - typeof programmer
2
是的,没错。continue 2会直接跳到foreach循环的下一次迭代,而不执行switch之后的任何代码。这里有一个演示。 - showdev
明白了,感谢您的详细解释。 - typeof programmer
我的链接已经失效了。这里有一个替代链接 - showdev

4

2

continue和break在阻止某些事情发生方面相似。

对于continue,它将停止花括号后的任何内容,但不会停止循环。switch语句将跳出此语句并继续执行下一条语句。

对于break,它将停止整个循环的执行,直接结束循环。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接