PHP在嵌套的foreach内部执行操作时中断

时间:2018-09-26 12:21:57

标签: php foreach do-while break

我有一个do while循环和一个嵌套的foreach循环。如果break 2(在这种情况下为do while),我正在使用foreach来同时破坏{{1}和$x > N)。现在它可以工作,但是...这是一个好习惯吗?还是我应该以其他方式打破while循环?

N = 4

谢谢! :D

2 个答案:

答案 0 :(得分:1)

使用do{}while();循环应该是一个非常慎重的决定。它的行为强制进行初始迭代,并且仅在每次迭代结束时检查中断条件。

将此循环比较为while()循环,或者将循环比较为for()。每次迭代之前都会执行条件检查,并且计数器,中断条件和增量都位于一个可读的位置。

我不确定您是否真的打算执行...

//do something here...
//and something here...

...在发生break 2的同一迭代中。什么情况使它适合您的项目?代码段的逻辑是,当$ x = 0、1、2、3、4和5时,您想执行那些神秘的代码行。但是foreach()块仅在$ x = 0、1、2、3和4时执行。

如果我对您的设计逻辑稍有瑕疵是正确的,那么我不建议您在其他进程的循环中编写一个break点。我建议使用for()循环。

$arr = ['a', 'b', 'c'];

for ($x = 0; $x <= 4; ++$x) {
    //do something here...
    //and something here...

    foreach ($arr as $k => $v){
        echo "($x)$k - $v<br />";
    }
}

由于您的break 2,您的while($x < 10);条件将永远无法满足,因此这是不合逻辑的设计。


实际上,如果您确实需要执行这些神秘的行,但不需要$x = 5时执行循环回显,则将循环控制完全放弃,并使用while(true)(编写无限循环)消除开发人员的困惑。

$arr = ['a', 'b', 'c'];
$x = 0;
while (true) {
    //do something here...
    //and something here...

    if ($x > 4) {
        break 2;
    }
    foreach ($arr as $k => $v) {
        echo "($x)$k - $v<br />";
    }

    ++$x;
}

答案 1 :(得分:0)

在您的示例中,break 2可以正常工作,是的,它是PHP的一部分。但是,我一直担心中断循环,尤其是当它们嵌套时。

考虑一下,如果您正在处理的代码要复杂得多,其中包括嵌套循环。指定2个循环的中断时,您需要非常小心,要考虑到任何新代码中的中断。

因此,在使用break可能有效的同时,我总是尝试避免使用break,并始终考虑是否存在无需中断即可工作的其他选项(尤其是当您嵌套循环时)。在您的示例中,我将使用以下代码:

$arr = ['a', 'b', 'c'];
$x = 0;

do{
    //do something here...
    //and something here...

    foreach($arr as $k => $v){
        echo '(' . $x . ')' . $k . ' - ' . $v . '<br />';
    }

    $x++;
} while($x <= 4);

这通常会导致更整洁的代码,更易于维护。