继续2并在switch语句中断

问题描述 投票:16回答:4

我是PHP的新手,在线查看下面的代码。它在continue 2声明中有breakswitch/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
}
php switch-statement
4个回答
21
投票

continue 2直接跳到结构的下一个迭代,后面是两个级别,即foreachbreak(相当于break 1)刚刚结束了switch声明。

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

穿过$elements。如果$element是“a”类型并且符合condition1,或者如果它的类型为“b”并且符合condition2,则跳到下一个$element。否则,在移动到下一个$element之前执行一些操作。


来自PHP.net:continue

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

来自PHP.net:switch

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

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


3
投票

恕我直言,区别在于你在切换之后和循环结束之前有代码。

    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
    }

2
投票

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

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


1
投票

继续和休息是相似的,因为意志不会发生。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.