Javascript 或 PHP for 循环中是否有 "superbreak"?

Is there a "superbreak" in Javascript or PHP for loops?

在我工作的许多项目中,我发现我有嵌套的 for 循环(我将重点关注 PHP 实现,但也适用于 javascript)采用这种通用形式:

$array1 = array(........);
$count1 = count($array1);

$invalidState = false;//An invalid state will be looked for in the innermost loop, and if found, break all the loops

for($i = 0; $i < $count1; $i++) {
    //parsing, then another loop
    $array2 = explode("needle", $array1[$i]);
    $count2 = count($array2);
    for($j = 0; $j < $count2; $j++) {
        //parsing, then sometimes even another another loop
        $array3 = explode("different-needle", $array2[$j]);
        $count3 = count($array3);
        for($k = 0; $k < $count3; $k++) {
            //check for an invalid state in $array3[$k], and break if invalid state = true; 
        }
        if ($invalidState) break;
    }
    if ($invalidState) break;
}

重申一下,如果在最内层循环中发现无效状态,则所有循环都应中断。但据我所知,要打破所有循环,我必须设置一个变量(在本例中为 $invalidState),并在所有外部循环中检查它,如果为真,则 break.

有没有哪一种"super-break"如果最内层循环满足条件,所有外层循环都会被破坏?

我建议让你的外部循环成为它自己的函数,并在循环的中心显式返回以硬中断所有嵌套循环。

可能最简单的方法就是将循环包装在一个函数中,当您想使用 "super-break" 时,只需使用 return.

您可以 return 用于此目的

是的,试试这个:

for($i = 0; $i < $count1; $i++) {
    //parsing, then another loop
    $array2 = explode("needle", $array1[$i]);
    $count2 = count($array2);
    for($j = 0; $j < $count2; $j++) {
        //parsing, then sometimes even another another loop
        $array3 = explode("different-needle", $array2[$j]);
        $count3 = count($array3);
        for($k = 0; $k < $count3; $k++) {
            break 3; 

    }
    if ($invalidState) break;
}
if ($invalidState) break;
}

当您编写 break n 时,您正在打破 n 嵌套循环。 但是,你不能break $foo,因为这个能力最近被移除了:

http://php.net/manual/en/control-structures.break.php

你应该考虑这个:

break 3; //Breaks 3 levels, so breaks outermost foreach