如何用PHP打破外部循环?

Mar*_*rty 120 php for-loop break

我希望在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;
    }
}
Run Code Online (Sandbox Code Playgroud)

什么是PHP等价物?

luc*_*303 265

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

break 2;
Run Code Online (Sandbox Code Playgroud)

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

  • 这是'继续2',只是为了更多的信息=) (17认同)

Sha*_*ngh 33

PHP手册

break接受一个可选的数字参数,告诉它有多少嵌套的封闭结构被打破.

break 2;
Run Code Online (Sandbox Code Playgroud)


Edg*_*ado 16

您只需使用break-n语句:

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

如果你在php> = 5.3,你可以使用标签和gotos,类似于动作脚本:

foreach (...)
{        
    foreach (...)
    {
        if (i.name == j) 
            goto top;
    }
}
top:
Run Code Online (Sandbox Code Playgroud)

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

  • goto 有相当有效的用途。甚至 eval() 也不是邪恶的(而且确实是)。它的用途甚至比 goto 还要少。 (2认同)

Jon*_*Jon 12

您可以使用break 2;同时打破两个循环.它与"命名"循环的示例并不完全相同,但它可以解决问题.


Jor*_*eno 6

$i = new MovieClip();
foreach ($movieClipArray as $i)
{
    $nameArray = array();
    foreach ($nameArray as $n) 
        if ($i->name == $n) 
            break 2;
}
Run Code Online (Sandbox Code Playgroud)


Pet*_*lin 5

使用转到?

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

  • 我知道这是一个 10 年前的答案,但 goto 从来都不是正确的答案。如果现在是 2021 年以后,并且您正在阅读本文,请永远不要使用 goto! (5认同)
  • 甚至手册本身也发出警告:https://www.php.net/manual/en/control-structs.goto.php (4认同)