首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不使用go to的情况下突破未知数量的嵌套循环?

在不使用go to的情况下突破未知数量的嵌套循环?
EN

Stack Overflow用户
提问于 2018-11-06 04:29:55
回答 1查看 145关注 0票数 1

我正在编写一些代码,这些代码经常包含在某些条件下需要突破的循环。问题是,有时,我嵌套了3个层次,有些是4层,有些是5层或更多。

我可以编写break 3break 4break 5等等,但这需要我跟踪每个嵌套循环中当前的深度。在不使用goto的情况下,是否有更容易的方法来突破未知数量的嵌套循环?

我认为这个问题需要更多的解释。

  1. 代码的一部分中有4个嵌套的for循环。
  2. 在这一行的某个地方,有3个嵌套的for循环。
  3. 然后在其他地方有5个嵌套的for循环。

所有的代码都是相互独立的,每次运行代码时,我只需要检查其中的一个。I循环通过的参数取决于某些参数的值。

我可以通过在每种情况下跟踪for循环并使用break number来突破这些循环,但是在100到200个不同的嵌套for循环中这样做是很累人的。如果必须更新嵌套循环的数量,它也将无法工作。

我希望PHP中有一些代码,它可以一次摆脱所有循环,而不需要我跟踪。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-06 04:39:17

如果您知道您想要跳出的循环的深度,但不知道从该循环中降了多少级别,则可以使用每个循环检查的变量。

代码语言:javascript
复制
$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变量:

代码语言:javascript
复制
$found = false;
foreach ($array as $level1) {
    foreach ($level1 as $level2) {
        if (...) {
            $found = true;
            break;
        }
    }
    if ($found) {
        break;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53165758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档