【问题标题】:continue 2 and break in switch statement继续 2 并中断 switch 语句
【发布时间】:2014-10-17 18:16:33
【问题描述】:

我是 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
}

【问题讨论】:

    标签: php switch-statement


    【解决方案1】:

    continue 2 直接跳到后两层的结构的下一个迭代,即foreachbreak(相当于break 1)只是结束switch 语句。

    您显示的代码中的行为是:

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


    来自PHP.net:continue

    continue 接受一个可选的数字参数,告诉它有多少 它应该跳到末尾的封闭循环的级别。默认 value 为 1,因此跳到当前循环的末尾。

    来自PHP.net:switch

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

    如果您在循环中有一个开关并希望继续下一个 外循环的迭代,使用 continue 2。

    【讨论】:

    • 感谢您的友好回答。所以,你的意思是,如果类型是“a”并且满足条件1,或者如果类型是“b”并且满足条件2,则循环中的剩余代码将不会执行外部switch语句并将跳转到下一次迭代循环,对吧?
    • 是的,没错。 continue 2 直接跳到foreach 循环的下一次迭代,而不执行switch 之后的任何代码。 Here's a demonstration.
    • 得到它。感谢您的友好解释。
    • 我上面的链接失效了。这是replacement
    【解决方案2】:

    continue 接受一个可选的数字参数,该参数告诉它应该跳到末尾的封闭循环的层数。默认值为 1,从而跳到当前循环的末尾。

    来源:http://php.net/manual/en/control-structures.continue.php

    【讨论】:

      【解决方案3】:

      continue 和 break 的相似之处在于都会阻止某事发生。

      如果继续,它将停止大括号后的任何内容,但不会停止循环。 switch 语句刚刚退出该语句并继续下一条语句。

      如果中断,它将停止整个循环继续,在那里结束循环。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-12
        • 1970-01-01
        • 1970-01-01
        • 2020-10-04
        • 1970-01-01
        • 1970-01-01
        • 2016-01-18
        • 2016-07-30
        相关资源
        最近更新 更多