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
,因为这个能力最近被移除了:
你应该考虑这个:
break 3; //Breaks 3 levels, so breaks outermost foreach
在我工作的许多项目中,我发现我有嵌套的 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
,因为这个能力最近被移除了:
你应该考虑这个:
break 3; //Breaks 3 levels, so breaks outermost foreach