array_values()可重置数字索引为连续整数,解决array_splice删除后索引不连续问题;关联数组通常无需重索引,仅当依赖数字下标时才需处理。

PHP 的 array_splice 删除元素后索引不连续,是因为它只移除指定位置的元素,**不会自动重排数字索引**(即保留原有键名),但会重置关联键。要让索引重新从 0 开始连续编号,关键在于“重置数字键”,而不是修复关联键。
用 array_values 重置数字索引
array_values() 是最直接、最常用的方法:它提取数组所有值,并返回一个以 0 为起始、连续整数为键的新数组,**完全忽略原键名**。
示例:
$arr = [10, 20, 30, 40, 50]; array_splice($arr, 1, 2); // 删除索引 1 和 2 处的元素 → [10, 40, 50],但键变为 [0, 3, 4] $arr = array_values($arr); // 重置为 [0=>10, 1=>40, 2=>50]
删除时直接赋值给新变量(避免中间状态)
如果不需要保留原数组,可一步完成删除 + 重索引:
- 先用
array_splice获取被删部分(可选),再对剩余部分调用array_values - 或直接用
array_values(array_splice(...))—— 注意:array_splice修改原数组并返回被删片段,所以不能链式调用;应先执行 splice,再对原数组调用array_values
替代方案:用 array_filter + array_values(适合按值/条件删除)
若删除逻辑较复杂(比如删掉所有等于某值的元素),用 array_filter 更清晰,它天然返回新数组,再套一层 array_values 即可保证索引连续:
$arr = [10, 20, 30, 20, 40]; $arr = array_values(array_filter($arr, fn($v) => $v !== 20)); // → [0=>10, 1=>30, 2=>40]
注意:关联数组通常不需要重索引
如果数组是关联形式(如 ['name' => 'Tom', 'age' => 25]),array_splice 默认会保留非数字键,此时“索引不连续”不是问题——关联键本就不该连续。只有当你后续依赖 for 循环 + 数字下标,或传递给某些只认数字索引的函数(如 implode 虽不依赖键,但 array_chunk 等可能受影响)时,才需重置。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











