Javascript或PHP for循环中是否存在"超级破解"?

The*_*lob 1 javascript php for-loop break

在我工作的许多项目中,我发现我有嵌套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;
}
Run Code Online (Sandbox Code Playgroud)

重申一下,如果在最里面的循环中找到无效状态,则所有循环都应该中断.但据我所知,要打破所有循环,我必须设置一个变量(在这种情况下$invalidState),并在所有外部循环中检查它,如果为true,则中断.

是否存在任何类型的"超级中断",如果在最内层循环中满足条件,则所有外部循环都将被破坏?

Lui*_*lez 6

是的,试试这个:

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;
}
Run Code Online (Sandbox Code Playgroud)

当你写的时候break n你破坏了n嵌套循环.但是,您不能break $foo,因为最近删除了此功能:

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

  • 这应该被视为答案,因为它真正给出了响应,而不是解决方法(返回) (2认同)