continue是php中跳过当前循环迭代、进入下一次迭代的控制语句,仅用于for、foreach、while、do-while循环内;for中执行后先步进再判断,foreach中跳至下一元素,while中跳回条件判断;与break彻底跳出循环不同。

continue 的作用域就是它所在的循环体
PHP 的 continue 不是“跳过所有后续代码”,而是“跳到当前循环结构的末尾”,这个“末尾”由语法结构决定:对 foreach 是迭代器推进后判断是否还有下一个元素;对 for 是执行 expr3(如 $i++)后再判断条件;对 while 是直接回到条件判断处。它不关心外层逻辑,只响应最近一层循环的控制流规则。
为什么没大括号时 continue 只影响下一行
因为 PHP 把 if ($cond) continue; 当作一个完整语句,而 if 后面没有 {} 时,只绑定紧邻的**单条语句**。下面这段代码:
foreach ($items as $item) {
if ($item['valid'] === false) continue;
echo $item['name'];
$count++;
}
实际等价于:
foreach ($items as $item) {
if ($item['valid'] === false) {
continue;
}
echo $item['name'];
$count++;
}
但如果你写成:
foreach ($items as $item) {
if ($item['valid'] === false) continue;
echo $item['name'];
$count++;
}
——看起来缩进一致,其实 echo 和 $count++ 都在 if 外。这是常见误判点,IDE 的缩进高亮或静态分析工具(如 PHPStan)能快速暴露这种结构错位。
continue 2 跳的是哪两层
数字参数表示「向上跳出几层循环」,不是“跳过两轮迭代”。continue 2 意思是:从当前最内层循环退出,再跳出外一层循环的本次迭代,直接进入外层循环的下一次判断/更新阶段。
-
continue或continue 1:只跳出当前foreach/for/while -
continue 2:跳出当前循环 + 它的直接外层循环(比如内层foreach里写continue 2,会跳到外层foreach的下一轮) - 参数必须是常量整数,不能是变量(如
$n = 2; continue $n;在 PHP 5.4+ 会报错) - 嵌套中混用
break和continue时,层级计数规则一致,但目标不同:break 2是彻底退出两层,continue 2是让外层也“开始下一轮”
在 switch 里用 continue 是什么行为
PHP 把 switch 视为一种“伪循环结构”,所以允许 continue,但它跳转的目标是**包围它的最近一层循环**,不是 switch 本身。例如:
foreach ($arr as $v) {
switch ($v) {
case 1:
continue; // ✅ 合法,效果等同于跳过本次 foreach 剩余部分
case 2:
break; // ❌ 这个 break 只跳出 switch,不影响 foreach
}
echo "after switch\n";
}
这里 continue 实际跳出的是 foreach,不是 switch。如果外面没有循环,continue 会报致命错误(Fatal error: 'continue' not in the 'loop' or 'switch' context)。
真正容易被忽略的是:continue 的层级跳转和循环结构绑定极紧,一旦嵌套层次变化、或外层加了条件包装(比如把 foreach 包进 if),continue 2 就可能指向错误的结构——这种问题往往只在特定数据分支下暴露,调试成本高。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











