for循环适合需访问下标、前后元素操作或控制遍历逻辑的场景,如反转数组、两两比较;foreach更安全高效,适用于常规数组遍历。

PHP 的 for 循环不是遍历数组的推荐方式,它适合控制次数明确的场景;真要遍历数组,优先用 foreach。
什么时候该用 for 而不是 foreach
当你需要访问数组下标、同时操作前后元素、或配合计数器做条件跳过/中断时,for 才有存在价值。比如反转数组、两两比较、按步长取值。
- 数组键不是连续数字(如
['a' => 1, 'b' => 2])→for会直接报错或跳过 - 你需要在循环中修改数组长度(如
unset())→foreach可能漏项,for更可控 - 想从后往前遍历 →
for ($i = count($arr) - 1; $i >= 0; $i--)比array_reverse()+foreach少一次复制
for 遍历索引数组的正确写法
必须手动获取长度、注意边界( 还是 <code>),且不能依赖 <code>count() 在循环体里反复调用——它不是常量。
- 错误写法:
for ($i = 0; $i → 每次都算一遍,性能差 - 正确写法:
$len = count($arr); for ($i = 0; $i - 如果数组可能为空,
count()返回 0,$i 不成立,循环直接跳过,没问题 - 示例:
$arr = [10, 20, 30];<br>$len = count($arr);<br>for ($i = 0; $i < $len; $i++) {<br> echo $arr[$i] . "\n"; // 输出 10, 20, 30<br>}
为什么 foreach 大多数时候更安全
foreach 自动适配键类型、不关心是否连续、内部用指针而非下标,天然规避很多 for 的坑。
立即学习“PHP免费学习笔记(深入)”;
-
for对关联数组失效:$arr = ['x' => 1, 'y' => 2]; for ($i = 0; $i → 输出两个 <code>Notice: Undefined index -
foreach无脑可用:foreach ($arr as $k => $v) echo "$k: $v"; - 修改数组时:
foreach ($arr as &$item) $item *= 2;直接改原数组;用for得写$arr[$i] *= 2,还得多一步判断键是否存在
真正要用 for 遍历数组,说明你已经在处理下标逻辑了——这时候得盯紧 count() 结果是否实时、键是否数字、是否越界。稍一松懈,Undefined offset 就冒出来。











