for循环遍历PHP索引数组需满足纯数字、从0开始连续递增条件,依赖count()和下标访问;foreach更安全常用,但for在反向遍历、两两比较、动态修改数组等场景不可替代。

for 循环遍历 PHP 索引数组的基本写法
直接用 for 遍历索引数组,核心是靠 count() 获取长度,再用下标 $i 逐个访问。它不依赖键名,只适用于**纯数字、从 0 开始连续递增**的索引数组。
示例:
$arr = ['a', 'b', 'c'];
for ($i = 0; $i < count($arr); $i++) {
echo $arr[$i] . "\n";
}-
count($arr)必须每次比较都调用(除非你手动缓存),PHP 不会自动优化这个调用 - 如果数组为空,
count()返回 0,for体不会执行,安全 - 若数组键不连续(比如
[0 => 'x', 2 => 'y']),$arr[1]会报Notice: Undefined offset
为什么不能直接用 foreach 替代?什么情况下必须用 for
foreach 更安全、更常用,但 for 在特定场景不可替代:需要同时操作当前索引和前后元素(如两两比较、滑动窗口)、需反向遍历、或需在循环中修改数组长度并控制步进逻辑。
- 反向遍历必须用
for:for ($i = count($arr) - 1; $i >= 0; $i--) - 跳过偶数下标:
for ($i = 0; $i - 循环中
unset($arr[$i])后继续用for容易错位,此时应避免边遍历边删,或改用array_values()重排索引后再遍历
性能与兼容性要注意的点
count() 在 PHP 7.2+ 对数组是 O(1),但对某些 Traversable 对象(如未实现 Countable 的自定义类)会触发全量迭代,所以确保 $arr 是真实数组——可用 is_array($arr) 或 is_countable($arr) 防御。
立即学习“PHP免费学习笔记(深入)”;
- 不要写
for ($i = 0; $i ,<code> 易多跑一次,且 <code>count()-1多一次运算 - PHP 8.0+ 支持
match和联合类型,但for本身无语法升级,老写法完全兼容 - 如果数组极大(十万级以上),
count()没问题,但反复读取$arr[$i]受内存局部性影响,比foreach稍慢一点,通常可忽略
常见报错和调试建议
最常遇到的是 Undefined offset,本质是下标越界或键不连续。别急着加 @ 抑制错误,先确认数组结构。
- 用
var_dump(array_keys($arr))看键是否真为0,1,2... - 循环前加判断:
if (!is_array($arr) || empty($arr)) { return; } - 调试时临时补一行:
echo "i={$i}, count=".count($arr)."\n";,一眼看出越界时机 - 注意字符串也能当数组用(
$str[0]),但count($str)永远是 1,这种误用会导致循环只跑一次
实际写的时候,90% 的情况用 foreach 更稳;真要用 for,就盯紧下标范围和数组连续性,这两点漏掉一个,后面全是 Notice。



















