Menu

PHP for 循环:语法、数组、break 和 continue

for ($i = 0; $i < 10; $i++) { ... } 把代码块运行固定的次数:初始值、每轮开始前检查的条件,以及步进。内容包括按索引遍历数组、倒数、嵌套循环、break 和 continue。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

for ($i = 0; $i < 5; $i++) { ... } 把代码块运行固定的次数。三个部分分别是初始化($i = 0,只运行一次)、条件($i < 5,每轮开始前检查)和步进($i++,每轮结束后运行)。条件一旦为 false,循环就结束。

循环结束后 $i 仍然存在,它的值是让条件变为 false 的那个值(6)。PHP 的循环变量没有块级作用域。

按索引遍历数组

对于键为 0, 1, 2 ... 的列表,计数器同时也是索引。先把 count() 的结果存进变量,这样就不会每轮都重新调用一次。

第一部分可以写多个用逗号分隔的表达式,$n = count($fruits) 就是这样只设置一次的。如果只需要每个值(不需要它前后的元素),foreach 写起来更短,也能用于键不是 0 到 n - 1 的数组。

倒数和步长大于 1

步进可以是任意表达式:$i-- 用来倒数,$i += 2 取每隔一个的数,$i *= 2 得到 2 的各次幂。

range('a', 'h') 生成数组 ['a', 'b', ... 'h']。用 range(1, 10) 配合 foreach 也能实现和 for 循环一样的计数,代价是要先生成整个数组。

break 和 continue

break 立即结束循环。continue 跳过本轮剩余的部分,直接跳到步进和下一次条件检查。

第二个循环的条件是空的,表示“永远为真”,所以它会一直运行到 break。在嵌套循环中,break 2 和 continue 2 作用于外层循环,下一个示例会演示。

嵌套 for 循环:乘法表

循环里套循环时,外层循环每运行一轮,内层循环都会完整地运行一遍。这里输出的是 HTML,所以“页面”标签页会显示一个真正的表格。

把 $size 改成 12 再运行一次。for (...): 和 endfor; 是替代语法,可以让夹在 HTML 标签之间的循环更易读。下面是用纯文本生成的同一张表,并用 break 2 同时结束两层循环:

常见错误:差一错误和死循环

for 循环有两个经典 bug:配合 count() 使用 <= 会多读一个越界的元素,PHP 会报告 Warning: Undefined array key 3,并把它当作 null;步进永远不会让计数器接近终点(本该写 $i++ 却写成了 $i--),条件就会一直为真。

对于事先无法知道要循环多少次的情况,比如一直读到文件末尾,用 while 循环更合适。

常见问题

PHP 中怎么按索引遍历数组?

对于键为 0、1、2 的列表,用 for ($i = 0; $i < count($arr); $i++) { echo $arr[$i]; }。大多数情况下 foreach ($arr as $i => $value) 更简单,同样能拿到索引,而且在键不是 0 到 n 减 1 时也能用。

PHP 中怎么跳出 for 循环?

break; 立即退出循环。在嵌套循环中,break 2; 会同时退出内层循环和它外面的一层。continue; 跳过本轮剩余的部分,直接进入下一轮。

PHP 中怎么用 for 循环倒数?

从大的数开始,用 >= 比较并递减:for ($i = 10; $i >= 1; $i--) { echo $i; }。步长不是 1 时,修改第三部分,例如 $i += 2 或 $i -= 5。

PHP 中什么时候用 for 而不用 foreach?

需要计数时(重复 5 次、1 到 100 的数字、每隔一个元素)或者需要按索引取前一个、后一个元素时,用 for。要访问数组的每个元素,尤其是没有数字索引的关联数组时,用 foreach。

Coddy 编程语言插图

和 Coddy 一起学编程

开始