突破forloop但在switch语句php中

Liz*_*ard 33 php for-loop break switch-statement

当我通常想要在所有迭代完成之前突破foreach循环时,我只是使用中断; 声明.例如

foreach($nodelist as $node) {
   if($metCriteria) {
       break;
   }
}
Run Code Online (Sandbox Code Playgroud)

但我的下一个例子中有一个switch语句.如果满足其中一个条件,那么我需要打破foreach循环.(中断的问题用于switch语句)

foreach($nodelist as $node)
{
    switch($node->nodeName) {
        case "a" :
            //do something
            break;
        case "b" :
            //break out of forloop
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

我只是在switch语句中设置一个变量然后在它之后中断吗?例如

$breakout = false;
foreach($nodelist as $node)
{
    switch($node->nodeName) {
        case "a" :
            //do something
            break;
        case "b" :
            $breakout = true;
            break;
    }
    if($breakout === true) break;
}
Run Code Online (Sandbox Code Playgroud)

这是最好的解决方案吗?还是这有另一种方式?

Jon*_*uhn 61

从手册(休息)

break接受一个可选的数字参数,告诉它有多少嵌套的封闭结构被打破.

  • +1这正是我所需要的.使用内置语言构造的加分点 - 到目前为止,我正在使用@Lizard样式. (2认同)

Vip*_*_Sb 12

休息2;

break x将突破那么多级别


Abd*_*nan 8

接受的答案没有实际的例子让我与你分享.

break 2 
Run Code Online (Sandbox Code Playgroud)

表示退出循环和切换.

$i = 0;
while (++$i) {
    switch ($i) {
    case 5:
        echo "At 5<br />\n";
        break 1;  /* Exit only the switch. */
    case 10:
        echo "At 10; quitting<br />\n";
        break 2;  /* Exit the switch and the while. */
    default:
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)