【问题标题】:Can you 'exit' a loop in PHP?你能在 PHP 中“退出”一个循环吗?
【发布时间】:2009-02-26 02:44:51
【问题描述】:

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

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

【问题讨论】:

    标签: php loops


    【解决方案1】:

    您正在寻找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";
    }
    

    【讨论】:

    • @Gabriel,它回答了这个问题,代码示例就是这样,一个示例。你也可以抱怨非描述性的“$arr”数组名。
    • @Gabriel:我贴的代码直接引用在PHP手册中,准确的展示了break语句的用法。
    • @Pax,对我来说这是主观的,每次我放一个例子时,我都试图放一个真实世界的代码。
    • @Gabriel:您根本没有发布示例,并且您提供的链接指向我提供的完全相同的源(示例代码来自最顶部)。你基本上做了和我一样的事情,但是这样做是为了让 OP 在他点击链接之前不会看到样本。
    • 一种奇怪的循环方式!
    【解决方案2】:

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

    【讨论】:

    • 好点。它在顶部附近的 PHP 手册中解释得很清楚。我认为这对于这个特定问题不是必须的,但这仍然很高兴知道。 +1
    【解决方案3】:

    break; 离开你的循环。

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

    【讨论】:

    • 正是我所需要的......“继续”只打破当前循环而不像 break 那样离开整个循环。
    【解决方案4】:

    您可以使用break 关键字。

    【讨论】:

      【解决方案5】:
      $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";
      }
      

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-11-05
          • 2018-03-10
          • 2019-11-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-01
          相关资源
          最近更新 更多