PHP中的"continue;"在foreach()循环中的使用是什么意思?

63
有没有一种方法,在内部 foreach 遇到某个语句时,可以继续外部 foreach?
例如:
foreach($c as $v)
{
    foreach($v as $j)
    {
        if($j = 1)
        {
            continue; // But not the internal foreach. the external;
        }
    }
}

1
看起来你可以...但你必须指定它应该继续多少层..在你的情况下,继续2层;更多信息请参见http://php.net/manual/en/control-structures.continue.php。 - Catalin
如果您能解释实际情况中的数据和原因,您将得到更恰当的答案。目前为止,因为极度简洁和含糊不清而得到了-1分。 - Your Common Sense
-1也应返回,因为在提问之前并没有进行太多研究,甚至没有查阅手册。 - hakre
1
无论SO标准如何,这是谷歌搜索的最佳结果。因此,我提供以下建议... 这可能是代码异味。在某些情况下,将内部循环包装在另一个函数/方法中可能是一个好主意。 - musicin3d
7个回答

138

试试这个,应该可以:

continue 2;

来自 PHP 手册:

Continue 命令接受一个可选的数字参数,用于告诉它应该跳过多少层嵌套循环并直接结束。

这里 的示例(第二个)中描述了你所需的代码。


16
尝试这个:continue 2; 根据手册:
continue accepts an optional numeric argument which tells it how many levels of enclosing loops it should skip to the end of. 

9

在这种情况下,有两种解决方案可用,一种是使用break,另一种是使用continue 2。请注意,当使用break跳出内部循环时,内部循环后面的任何代码仍将被执行。

foreach($c as $v)
{
    foreach($v as $j)
    {
        if($j = 1)
        {
            break;
        }
    }
    echo "This line will be printed";
}

另一种解决方案是使用continue,后面跟上要继续执行的层数。
foreach($c as $v)
{
    foreach($v as $j)
    {
        if($j = 1)
        {
            continue 2;
        }
    }
    // This code will not be reached.
}

5
这将继续到更高级别(因此是外部的foreach)。
 continue 2

5
<?php
foreach($c as $v)
{
    foreach($v as $j)
    {
        if($j = 1)
        {
            continue 2; // note the number 2
        }
    }
}
?>

RTM


每个回答都提到了 continue 2 的参考资料,由于某种原因,都被某人投了一次反对票... - daiscog

3
尝试使用 break 代替 continue
您可以在 break 后面跟一个整数,表示要跳出的循环次数。

0

1
不,他没有这样做 - 他只是像其他人指出的那样,在“continue”后面添加了一个数字。 - daiscog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接