PHP合并数组去重后键不连续,是因为array_unique()和array_merge()保留原始键名;需用array_values()重置为从0开始的连续数字索引。

PHP合并数组去重后键不连续,是因为 array_unique() 和 array_merge() 等函数默认保留原始键名(尤其是关联键),不会自动重排数字索引。要让键变成从 0 开始的连续整数,只需用 array_values() 重置索引即可。
为什么键会不连续?
比如两个数组:$a = [0 => 'a', 2 => 'b'];$b = [1 => 'c', 3 => 'd'];
合并去重后(如用 array_unique(array_merge($a, $b))),结果可能是 [0=>'a', 2=>'b', 1=>'c', 3=>'d'] —— 键顺序混乱、不连续,且仍保留原键名。
正确做法:用 array_values() 重置索引
它会丢弃原有键名,按值顺序生成新的 0 开始的数字索引:
- 先合并:
$merged = array_merge($arr1, $arr2); - 再去重:
$unique = array_unique($merged); - 最后重索引:
$result = array_values($unique);
一行写法:$result = array_values(array_unique(array_merge($arr1, $arr2)));
注意关联数组和字符串键的情况
array_values() 只重置「数字键」,对字符串键(如 ['name' => 'Tom'])无影响——它只返回值,新数组键仍是 0,1,2…,原字符串键会被丢弃。如果你需要保留特定键(比如 id 字段),就不能简单用 array_values(),而应手动重建或使用 array_column($arr, null, 'id') 等方式。
立即学习“PHP免费学习笔记(深入)”;
其他实用组合(可选)
- 去重并保持顺序:PHP 8.1+ 可用
array_unique($arr, SORT_REGULAR),再套array_values() - 合并多个数组:用
...$arrays展开:array_values(array_unique(array_merge(...$arrays))) - 忽略大小写去重:先用
array_map('strtolower', $arr)预处理,再合并去重重索引(注意丢失原始大小写)



















