continue

(PHP 4, PHP 5, PHP 7, PHP 8)

continue 用于循环结构中,跳过当前循环迭代的剩余部分,并从条件评估开始执行下一个迭代。

注意: 在 PHP 中,switch 语句被认为是循环结构,用于 continuecontinue 的行为类似于 break(当没有传递参数时),但会引发警告,因为这很可能是一个错误。 如果 switch 在循环内,continue 2 将继续执行外部循环的下一个迭代。

continue 接受一个可选的数字参数,指示它应该跳过多少级封闭循环以到达末尾。 默认值为 1,因此跳过到当前循环的末尾。

<?php
$arr
= ['zero', 'one', 'two', 'three', 'four', 'five', 'six'];
foreach (
$arr as $key => $value) {
if (
0 === ($key % 2)) { // 跳过键为偶数的成员
continue;
}
echo
$value . "\n";
}
?>

上面的示例将输出

one
three
five
<?php
$i
= 0;
while (
$i++ < 5) {
echo
"Outer\n";
while (
1) {
echo
"Middle\n";
while (
1) {
echo
"Inner\n";
continue
3;
}
echo
"This never gets output.\n";
}
echo
"Neither does this.\n";
}
?>

上面的示例将输出

Outer
Middle
Inner
Outer
Middle
Inner
Outer
Middle
Inner
Outer
Middle
Inner
Outer
Middle
Inner

省略 continue 后的分号会导致混淆。 以下是一个你不应该做的示例。

<?php
for ($i = 0; $i < 5; ++$i) {
if (
$i == 2)
continue
print
"$i\n";
}
?>

可以预期结果为

0
1
3
4

Changelog for continue
版本 描述
7.3.0 continue 在一个尝试充当 switchbreak 语句的 switch 中将触发一个 E_WARNING

添加一个注释

用户贡献的注释 7 个注释

jaimthorn at yahoo dot com
14 年前
页面顶部的“在 PHP 中,switch 语句被认为是循环结构,用于 continue”这句话让我很困惑,所以我使用以下代码进行了一些实验,以弄清楚 continue 在 switch 中的具体语义。

<?php

for( $i = 0; $i < 3; ++ $i )
{
echo
' [', $i, '] ';
switch(
$i )
{
case
0: echo 'zero'; break;
case
1: echo 'one' ; XXXX;
case
2: echo 'two' ; break;
}
echo
' <' , $i, '> ';
}

?>

对于 XXXX,我填入了

- continue 1
- continue 2
- break 1
- break 2

并观察了不同的结果。 这让我得出了以下描述 break 和 continue 区别的单行总结

continue 在紧靠闭合花括号(})之前恢复执行,而 break 在闭合花括号之后恢复执行。

推论:由于 switch 不是(真正的)循环结构,因此在 switch 的闭合花括号之前恢复执行与使用 break 语句的效果相同。 在(for、while、do-while)循环的情况下,在它们的闭合花括号之前恢复执行意味着一个新的迭代开始了 - 这当然与 break 语句的行为大不相同。

在上面的单行总结中,我忽略了 break/continue 参数的存在,但当提供参数时,该单行总结也仍然有效。
Nikolay Ermolenko
15 年前
使用 continue 和 break

<?php
$stack
= array('first', 'second', 'third', 'fourth', 'fifth');

foreach(
$stack AS $v){
if(
$v == 'second')continue;
if(
$v == 'fourth')break;
echo
$v.'<br>';
}
/*

first
third

*/

$stack2 = array('one'=>'first', 'two'=>'second', 'three'=>'third', 'four'=>'fourth', 'five'=>'fifth');
foreach(
$stack2 AS $k=>$v){
if(
$v == 'second')continue;
if(
$k == 'three')continue;
if(
$v == 'fifth')break;
echo
$k.' ::: '.$v.'<br>';
}
/*

one ::: first
four ::: fourth

*/

?>
Koen
11 年前
如果您在循环中使用递增值,请确保在调用 continue 之前递增它;否则您可能会遇到无限循环。
rjsteinert.com
13 年前
最基本的例子,打印“13”,跳过 2。

<?php
$arr
= array(1, 2, 3);
foreach(
$arr as $number) {
if(
$number == 2) {
continue;
}
print
$number;
}
?>
www.derosetechnologies.com
20 年前
与可以在 break 语句末尾附加数字以指示要“break”的“循环”级别的方式相同,也可以在 'continue' 语句末尾附加数字来实现相同目标。 以下是一个简单的例子

<?
for ($i = 0;$i<3;$i++) {
echo "Start Of I loop\n";
for ($j=0;;$j++) {

if ($j >= 2) continue 2; // 此“continue”适用于“$i”循环
echo "I : $i J : $j"."\n";
}
echo "End\n";
}
?>

这里的输出是
Start Of I loop
I : 0 J : 0
I : 0 J : 1
Start Of I loop
I : 1 J : 0
I : 1 J : 1
Start Of I loop
I : 2 J : 0
I : 2 J : 1

有关更多信息,请参阅 php 手册中 'break' 语句的条目。
Geekman
16 年前
为了澄清,以下是一些在 while/do-while 循环中使用 continue 的示例,表明它对条件评估元素没有影响。

<?php
// 输出 "1 ".
$i = 0;
while (
$i == 0) {
$i++;
echo
"$i ";
if (
$i == 1) continue;
}

// 输出 "1 2 ".
$i = 0;
do {
$i++;
echo
"$i ";
if (
$i == 2) continue;
} while (
$i == 1);
?>

这两个代码段在没有 continue 的情况下行为完全相同。
tufan dot oezduman at gmail dot com
17 年前
上面 greg 和 dedlfix 提到的包含脚本中 continue 行为的可能解释可能是“return”文档中的以下行:“如果当前脚本文件被 include() 或 require(),则控制权将传递回调用文件。”
greg 的示例会产生错误,因为 page2.php 不包含任何循环操作。

所以,将控制权返回给 page1.php 中的循环操作的唯一方法是返回。
To Top