【问题标题】:How can I break an outer loop with PHP?如何用 PHP 打破外循环?
【发布时间】:2011-08-18 08:04:22
【问题描述】:

我希望打破 PHP 中的外部 for/foreach 循环。

这可以像这样在 ActionScript 中完成:

top : for each(var i:MovieClip in movieClipArray)
{
    for each(var j:String in nameArray)
    {
        if(i.name == j) break top;
    }
}

什么是 PHP 等价物?

【问题讨论】:

标签: php for-loop nested-loops break


【解决方案1】:

在2个嵌套循环的情况下:

break 2;

http://php.net/manual/en/control-structures.break.php

【讨论】:

  • continue 2,仅供参考 =)
【解决方案2】:

PHP Manual

break 接受一个可选的数字 参数告诉它有多少 嵌套的封闭结构是 破了。

break 2;

【讨论】:

    【解决方案3】:

    你可以只使用一个 break-n 语句:

    foreach(...)
    {
        foreach(...)
        {
            if (i.name == j) 
                break 2; //Breaks 2 levels, so breaks outermost foreach
        }
    }
    

    如果你在 php >= 5.3 中,你可以使用标签和gotos,类似于在 ActionScript 中:

    foreach (...)
    {        
        foreach (...)
        {
            if (i.name == j) 
                goto top;
        }
    }
    top:
    

    但是goto必须谨慎使用。 Goto 是邪恶的(被认为是不好的做法)

    【讨论】:

    • goto 有很多非常有效的用途。甚至 eval() 也不是邪恶的(而且确实如此)。它的用途比 goto 还要少。
    • 是的。这就是为什么我说“必须小心使用 goto”
    • 在该说明中,我相信此页面是相关的:php.net/manual/en/control-structures.goto.php
    【解决方案4】:

    您可以使用break 2; 同时跳出两个循环。它与您使用“命名”循环的示例不太一样,但它可以解决问题。

    【讨论】:

      【解决方案5】:
      $i = new MovieClip();
      foreach ($movieClipArray as $i)
      {
          $nameArray = array();
          foreach ($nameArray as $n) 
              if ($i->name == $n) 
                  break 2;
      }
      

      【讨论】:

      • 很好地尝试将整个提供的代码转换为 PHP,尽管 break 语句没有做我需要做的事情(它只结束内部循环)。
      • 刷新你的页面 :) 我用 break 2 替换了 ... 根据 PHP 手册:“break 接受一个可选的数字参数,告诉它有多少嵌套的封闭结构被打破。”
      【解决方案6】:

      使用 goto?

      for ($i = 0, $j = 50; $i < 100; $i++) 
      {
        while ($j--) 
        {
          if ($j == 17) 
            goto end; 
        }  
      }
      echo "i = $i";
      end:
      echo 'j hit 17';
      

      【讨论】:

      • 我知道这是一个 10 年前的答案,但 goto 从来都不是正确的答案。如果现在是 2021 年以上并且您正在阅读本文,请不要使用 goto!
      • 即使手册本身也警告过它:php.net/manual/en/control-structures.goto.php
      猜你喜欢
      • 2021-05-02
      • 2021-12-20
      • 2010-11-24
      • 1970-01-01
      • 1970-01-01
      • 2016-05-16
      • 2013-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多