我正在编写一些代码,这些代码经常包含某些情况下需要打破的循环。问题是有时我嵌套的深度为3个级别,有时嵌套4个,有时嵌套5个或更多。
我可以通过编写break 3
,break 4
和break 5
等来突围,但这需要我跟踪每个嵌套循环中的当前深度。是否有一种更简单的方法可以在不使用goto
的情况下打破未知数量的嵌套循环?
我认为这个问题需要更多解释。
for
循环。for
循环。for
循环。它们之间是相互独立的,对于每次运行的代码,我只需要经过其中之一即可。我循环浏览的内容取决于某些参数的值。
我可以通过跟踪每种情况下的for
循环并使用break number
来打破它们,但是对100-200套不同的嵌套for
循环集这样做很累。如果必须更新嵌套循环的数量,它也将不起作用。
我希望PHP中有一些代码可以在不跟踪的情况下立即脱离所有循环。
答案 0 :(得分:0)
如果您知道要突破的循环深度,但不知道要从哪个层次下降,则可以使用每个循环检查的变量。
$break_level = 99;
while (...) {
while (...) {
while (...) {
while (...) {
...
if (...) {
$break_level = 2;
break;
}
...
}
if ($break_level <= 3) {
break;
}
}
if ($break_level <= 2) {
break;
}
}
if ($break_level <= 1) {
break;
}
}
但是几乎不需要这种一般性。我一生中已经编写了数百万个循环,几乎不需要除当前循环,其直接容器或整个嵌套循环以外的任何东西。在这些情况下,通常可以检查一个变量。例如,如果要搜索多维数组,只需设置一个$found
变量:
$found = false;
foreach ($array as $level1) {
foreach ($level1 as $level2) {
if (...) {
$found = true;
break;
}
}
if ($found) {
break;
}
}
答案 1 :(得分:0)
我想你可以做些简单的事情:
<?php
$keepgoing = true;
for ( ;$keepgoing /* && other condition */; ) {
for ( ;$keepgoing /* && other condition */; ) {
for ( ;$keepgoing /* && other condition */; ) {
for ( ;$keepgoing /* && other condition */; ) {
$keepgoing = false;
break;
}
}
}
}
这个想法是在进入迭代之前检查变量。与while
一样好用。