继续或中断特定循环

时间:2017-10-05 08:23:02

标签: php

我有几个循环,并希望在使用break或continue指令时指定一个特定的循环

PHP doc中写道,我可以使用数字数字参数来告诉它有多少嵌套的封闭结构被打破。

$i = 0;
while (++$i) {
    switch ($i) {
    case 5:
        echo "At 5<br />\n";
        break 1;  /* Exit only the switch. */
    case 10:
        echo "At 10; quitting<br />\n";
        break 2;  /* Exit the switch and the while. */
    default:
        break;
    }
}

但是我喜欢这样更友好的东西:

$i = 0;
loop1: // Label/tag of loop1
while (++$i) {
    loop2: // Label/tag of loop2
    switch ($i) {
    case 5:
        echo "At 5<br />\n";
        break loop2;  /* Exit only the switch. */
    case 10:
        echo "At 10; quitting<br />\n";
        break loop1;  /* Exit the switch and the while. */
    default:
        break;
    }
}

有可能吗?

3 个答案:

答案 0 :(得分:2)

这是不可能的。此外,过多的break - 语句会使您的代码难以理解且难以理解。您应该重新构建代码以避免breaks并使用其他control flow statements

do {
    $i += 1;
    if($i === 5) {
        echo "At 5<br />\n";
    } else if ($i === 10) {
        echo "At 10; quitting<br />\n";
    }
} while($i < 10);

您还可以尝试将代码拆分为不同的函数或方法。

function doSomething($i) {
    if($i === 5) {
        echo "At 5<br />\n";
    } else if ($i === 10) {
        echo "At 10; quitting<br />\n";
    }
}

function run() {
    $i = 0;
    while($i < 10) doSomething(++$i);    
}

在第二种情况下,您必须了解两个函数之间的强依赖性。如果您要更改run()以使其计为15,那么doSomething函数会在$i = 10时出错。因此,您应该将它们封装在一个类中,或者尝试引入另一个变量,这两个函数可以用来确定循环何时结束。这将避免未来的错误和神奇的事情发生。

function doSomething($i, $max) {
    if($i === 5) {
        echo "At 5<br />\n";
    } else if ($i === $max) {
        echo "At 10; quitting<br />\n";
    }
}

function run($max) {
    $i = 0;
    while($i < $max) doSomething(++$i);    
}

当然,如果您的代码仍然可读,那么使用一个,两个甚至更多breaks是没有问题的。但是你应该考虑是否还有其他更优雅的方法来解决你的问题。而且大多数都有更好的方式。

答案 1 :(得分:1)

我的个人建议是将嵌套循环代码提取到单独的方法中和/或使用异常。一般来说,“打破标签”感觉就像“转到”。我不希望你被恐龙吃掉;)

答案 2 :(得分:1)

我不相信这是可能的,但是如果你分解你的代码并将嵌套循环放在一个函数中,你可以使用return来退出所有循环。这可能会提高可读性。