array_values()用于合并数组后重置为连续数字索引,尤其必要于关联数组合并后保留字符串键的情况;它仅作用于一维顶层键,不递归处理子数组。

合并数组后重新索引,核心就是用 array_values() 把键重置为从 0 开始的连续数字索引。它不改变值,只“抹掉”原来的键名,生成新的数字键。
为什么需要 array_values()?
PHP 合并数组常用 array_merge(),但它对**关联数组**(带字符串键)和**索引数组**(数字键)处理方式不同:
- 合并两个纯数字键数组时,
array_merge()会自动重排键(0,1,2…),此时可不用array_values() - 但若原数组有字符串键(比如
['a' => 1, 'b' => 2]),array_merge()会保留这些键,导致结果不是连续数字索引 - 即使你用
+合并或手动拼接,也可能留下空洞或非数字键,这时array_values()是最直接的“归零”手段
基本用法:合并后再重索引
先合并,再套一层 array_values():
$arr1 = ['apple', 'banana']; $arr2 = ['cherry', 'date']; $merged = array_merge($arr1, $arr2); // [0=>'apple', 1=>'banana', 2=>'cherry', 3=>'date'] $reindexed = array_values($merged); // 效果同上,已是连续数字键 // 更典型场景:含字符串键的数组 $arr3 = ['x' => 'foo', 'y' => 'bar']; $arr4 = ['z' => 'baz']; $merged_assoc = array_merge($arr3, $arr4); // ['x'=>'foo','y'=>'bar','z'=>'baz'] ← 键仍是字符串! $reindexed_assoc = array_values($merged_assoc); // [0=>'foo', 1=>'bar', 2=>'baz']
常见组合写法(一行搞定)
不需要中间变量,直接链式调用:
立即学习“PHP免费学习笔记(深入)”;
$new = array_values(array_merge($a, $b, $c));-
$new = array_values($a + $b + $c);(注意:+不会覆盖重复键,且不重排数字键,所以仍需array_values()归一化) - 配合
array_filter()去空后再重索引:array_values(array_filter($arr))
注意点:它只处理一维,不递归
array_values() 只重置顶层键。如果数组元素本身是子数组,子数组的键不会被改动:
$nested = [['id'=>1, 'name'=>'A'], ['id'=>2, 'name'=>'B']]; $result = array_values($nested); // 输出:[0=>['id'=>1,'name'=>'A'], 1=>['id'=>2,'name'=>'B']] ← 外层数字键重置了,内部键不变
如需深层重索引,得自己递归处理或用其他函数(如 array_walk_recursive 配合重建)。



















