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

时间:2009-02-26 02:44:51

标签: php loops

我有一个循环,在我的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
}

这一切都很好,但它仍然循环,尽管一个错误后它不需要。有没有办法逃脱循环?

7 个答案:

答案 0 :(得分:185)

您正在寻找break声明。

$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";
}

答案 1 :(得分:143)

如其他帖子所述,您可以使用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

答案 2 :(得分:42)

break;离开你的循环。

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

答案 3 :(得分:5)

使用break

答案 4 :(得分:3)

$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";
}

答案 5 :(得分:2)

所有这些都是很好的答案,但我想建议一个我觉得更好的代码标准。您可以选择在循环条件中使用一个标志,指示是否继续循环并避免同时使用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的范围。而是定义一个变量,指示是否要中断特定循环。当您有许多可能嵌套或可能不嵌套的循环时,这很有用。

答案 6 :(得分:-6)

我用css尝试了解决方案,但无法为我工作。

href="#"替换为href="javascript:void(0);"已经起作用,因为在这种情况下,模态不会跳到顶部并保持在事件元素位置。