php数组空下标追加元素时,新键为当前最大数字索引加1;无数字键则从0开始,负数和浮点数键被截断为整型参与计算,unset不改变后续自动索引规则。

PHP 数组的下标自动增长,不是“每次加1”的机械递增,而是遵循一套明确但容易被误解的规则:当使用空方括号 [] 追加元素时,PHP 会查找当前数组中**最大的数字索引(整型键)**,然后在此基础上加 1 作为新键;如果没有数字索引,则默认从 0 开始。
数字键决定下一个自动索引
PHP 不关心数组是否“连续”,只看已有数字键的最大值:
-
// $arr = [0 => 'a', 2 => 'c'];
使用$arr[] = 'd';→ 新元素键为 3(因为最大数字键是 2) -
// $arr = [5 => 'x', 10 => 'y'];
再执行$arr[] = 'z';→ 新元素键为 11 -
// $arr = ['a' => 1, 'b' => 2];
全是字符串键 →$arr[] = 3;→ 新元素键为 0(无数字键,从 0 起)
混合键类型时的特殊行为
数组中同时存在数字键和字符串键,不影响自动索引逻辑——只看数字键:
-
$arr = [0 => 'first', 'name' => 'Alice', 99 => 'last'];
$arr[] = 'new';→ 键为 100(99 + 1) -
$arr = ['name' => 'Bob', 'age' => 25];
没有数字键 →$arr[] = 'active';→ 键为 0
注意负数和浮点数键的处理
PHP 会将**非整型数字键强制转换为整型**,再参与比较:
立即学习“PHP免费学习笔记(深入)”;
-
$arr = [-5 => 'a', 3.7 => 'b'];
实际键为 -5 和 3(3.7 截断为 3)→ 最大数字键是 3 → 下一个[]键为 4 -
$arr = [0 => 'x', -10 => 'y'];
最大数字键仍是 0 →$arr[] = 'z';→ 键为 1
unset 后的自动索引不会重排
删除某个数字键后,自动索引仍基于剩余数字键的最大值,不会填补空缺或重置:
-
$arr = [0 => 'a', 1 => 'b', 2 => 'c']; unset($arr[1]);
此时剩下键 0 和 2 →$arr[] = 'd';→ 新键为 3(不是 1) - 若想重排索引,需显式调用
array_values($arr)











