在不使用 go to 的情况下突破未知数量的嵌套循环?
Break out of unknown number of nested loops without using go to?
我正在编写一些代码,其中经常包含我需要在特定条件下跳出的循环。问题是有时,我嵌套了 3 层,有时是 4 层,有时是 5 层或更多层。
我可以通过写 break 3
、break 4
和 break 5
等来突破,但这需要我跟踪每个嵌套循环内的当前深度。有没有更简单的方法可以在不使用 goto
的情况下突破未知数量的嵌套循环?
我觉得这个问题需要多解释一下。
- 部分代码中有 4 个嵌套
for
循环。
- 某处有 3 个嵌套的
for
循环。
- 然后在其他地方有 5 个嵌套的
for
循环。
它们都是相互独立的,我只需要为每个 运行 的代码遍历其中一个。我循环的那个取决于某些参数的值。
我可以通过在每种情况下跟踪 for
循环并使用 break number
来摆脱它们,但是对 100-200 组不同的嵌套 for
循环执行此操作很累人.如果必须更新嵌套循环的数量,它也将不起作用。
我希望 PHP 中有一些代码可以在我不跟踪的情况下立即跳出所有循环。
如果您知道要跳出的循环的深度,但不知道从那个循环下来的级别,您可以使用每个循环检查的变量。
$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;
}
}
我正在编写一些代码,其中经常包含我需要在特定条件下跳出的循环。问题是有时,我嵌套了 3 层,有时是 4 层,有时是 5 层或更多层。
我可以通过写 break 3
、break 4
和 break 5
等来突破,但这需要我跟踪每个嵌套循环内的当前深度。有没有更简单的方法可以在不使用 goto
的情况下突破未知数量的嵌套循环?
我觉得这个问题需要多解释一下。
- 部分代码中有 4 个嵌套
for
循环。 - 某处有 3 个嵌套的
for
循环。 - 然后在其他地方有 5 个嵌套的
for
循环。
它们都是相互独立的,我只需要为每个 运行 的代码遍历其中一个。我循环的那个取决于某些参数的值。
我可以通过在每种情况下跟踪 for
循环并使用 break number
来摆脱它们,但是对 100-200 组不同的嵌套 for
循环执行此操作很累人.如果必须更新嵌套循环的数量,它也将不起作用。
我希望 PHP 中有一些代码可以在我不跟踪的情况下立即跳出所有循环。
如果您知道要跳出的循环的深度,但不知道从那个循环下来的级别,您可以使用每个循环检查的变量。
$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;
}
}