如何用 PHP 打破外循环?

Posted

技术标签:

【中文标题】如何用 PHP 打破外循环?【英文标题】:How can I break an outer loop with 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.net/manual/en/control-structures.break.php 我发布了 2 个解决方案,一个带有标签,如在动作脚本中,另一个仅使用 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

以上是关于如何用 PHP 打破外循环?的主要内容,如果未能解决你的问题,请参考以下文章

请问php中如何用for循环遍历出关联数组,不要用foreach,用for循环哦

如何用for循环遍历PHP中以0开头的数字? [复制]

如何用SQL循环查询语句

如何用do…while循环输出九九乘法表?

如何用php创建一个无限遍历数组,并打印

PHP + jQuery - 使用数据库数据进行长轮询不起作用(它不会打破循环)