如何用 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 中,你可以使用标签和goto
s,类似于在 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 打破外循环?的主要内容,如果未能解决你的问题,请参考以下文章