我有一个do while
循环和一个嵌套的foreach
循环。如果break 2
(在这种情况下为do while
),我正在使用foreach
来同时破坏{{1}和$x > N
)。现在它可以工作,但是...这是一个好习惯吗?还是我应该以其他方式打破while循环?
N = 4
谢谢! :D
答案 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);
这通常会导致更整洁的代码,更易于维护。