你能在 PHP 中“退出”一个循环吗?

我有一个循环,在我的 PHP 代码中做一些错误检查。

foreach($results as $result) {
if (!$condition) {
$halt = true;
ErrorHandler::addErrorToStack('Unexpected result.');
}


doSomething();
}


if (!$halt) {
// do what I want cos I know there was no error
}

这种方法工作得很好,但是它仍然在循环,尽管在出现一个错误之后就不需要了。有办法逃出这个循环吗?

294254 次浏览

可以使用 休息关键字。

您正在寻找 休息语句。

$arr = array('one', 'two', 'three', 'four', 'stop', 'five');
while (list(, $val) = each($arr)) {
if ($val == 'stop') {
break;    /* You could also write 'break 1;' here. */
}
echo "$val<br />\n";
}

如其他文章所述,您可以使用 break 关键字。有一件事我们已经暗示过了,但是没有解释清楚,那就是关键字可以用一个数值来告诉 PHP 要从多少级中断。

例如,如果有三个 foreach 循环嵌套在彼此之间,试图找到一段信息,那么可以执行“ break 3”来跳出所有三个嵌套循环。这将适用于‘ for’、‘ foreach’、‘ while’、‘ do-while’或‘ switch’结构。

$person = "Rasmus Lerdorf";
$found = false;


foreach($organization as $oKey=>$department)
{
foreach($department as $dKey=>$group)
{
foreach($group as $gKey=>$employee)
{
if ($employee['fullname'] == $person)
{
$found = true;
break 3;
}
} // group
} // department
} // organization

break;离开你的循环。

continue;跳过循环剩余部分的任何代码,继续进行下一个循环,只要条件仍为真。

$arr = array('one', 'two', 'three', 'four', 'stop', 'five');
foreach ($arr as $val) {
if ($val == 'stop') {
break;    /* You could also write 'break 1;' here. */
}
echo "$val<br />\n";
}

所有这些都是很好的答案,但我想再建议一个我认为是更好的代码标准。您可以选择在循环条件中使用一个标志,该标志指示是否继续循环并避免同时使用 break

$arr = array('one', 'two', 'three', 'four', 'stop', 'five');
$length = count($arr);
$found = false;
for ($i = 0; $i < $length && !$found; $i++) {
$val = $arr[$i];
if ($val == 'stop') {
$found = true; // this will cause the code to
// stop looping the next time
// the condition is checked
}
echo "$val<br />\n";
}

我认为这是更好的代码实践,因为它不依赖于使用 break的范围。相反,您定义一个变量,该变量指示是否中断一个特定的循环。当有许多循环可能是嵌套的,也可能不是顺序的时候,这非常有用。