array_values() 不去重,仅重置索引为连续数字;需先用 array_unique() 去重再调用 array_values() 重整键名,支持链式调用,严格比较需指定 sort_string 或 sort_regular 参数。

PHP 8.0 中,array_values() 本身**不负责去重**,它只做一件事:提取数组的值,并重置为从 0 开始的连续数字索引。要去重并重建索引,你需要先去重(比如用 array_unique()),再用 array_values() 重整键名。
先去重,再重索引
这是最常用、最直接的方式:
-
array_unique()去除重复值,但保留原始键名(可能不连续、非数字) -
array_values()接收去重后的数组,丢弃旧键,生成新索引[0, 1, 2, ...]
示例:
$arr = ['a', 'b', 'a', 'c', 'b']; $unique = array_unique($arr); // ['a'=> 'a', 'b'=> 'b', 'd'=> 'c'] $reindexed = array_values($unique); // [0=>'a', 1=>'b', 2=>'c']
一行搞定(链式调用)
PHP 8.0 支持函数返回值直接传参,可写成单行:
$arr = ['x', 'y', 'x', 'z']; $result = array_values(array_unique($arr)); // [0=>'x', 1=>'y', 2=>'z']
注意:array_unique() 默认比较松散(==),如需严格类型区分(比如 0 和 '0' 视为不同),加第三个参数:array_unique($arr, SORT_STRING) 或 SORT_REGULAR
配合其他去重逻辑时的处理
如果去重逻辑更复杂(如按对象属性、多维数组去重),需先自定义去重得到一维值数组,再用 array_values():
// 示例:二维数组按某个字段去重
$data = [['id'=>1,'name'=>'A'], ['id'=>2,'name'=>'B'], ['id'=>1,'name'=>'C']];
$ids = [];
$filtered = [];
foreach ($data as $item) {
if (!in_array($item['id'], $ids)) {
$filtered[] = $item['name']; // 只取 name 值
$ids[] = $item['id'];
}
}
$final = array_values($filtered); // [0=>'A', 1=>'B']
注意 key 类型和 null 值
array_values() 对 null、false、空字符串等“假值”同样有效,不会跳过;但它只作用于一维值,不递归。若原数组含关联键或混合键(如 ['a'=>1, 2=>2, 'x'=>3]),array_values() 会统一转为数字索引,且顺序按原数组遍历顺序保持不变。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











