PHP中如何移除数组的重复值与空值?
PHP多维数组去重并移除空值问题
问题场景
尝试用array_unique()移除数组中的重复值和空值,但输出结果不符合预期。
原始数据
Array ( [0] => Array ( [0] => [1] => 1 [2] => [3] => 108 [4] => ) [1] => Array ( [0] => [1] => 1 [2] => [3] => 108 [4] => [5] => 101 ) [2] => Array ( [0] => [1] => [2] => 108 [3] => ) )
尝试的代码及错误结果
代码1(带SORT_REGULAR参数)
$array = array_filter($userids); $arrays = array_unique($array, SORT_REGULAR); print_r($arrays);
输出:和原始数据完全一致,无任何效果。
代码2(无SORT_REGULAR参数)
$array = array_filter($userids); $arrays = array_unique($array); print_r($arrays);
输出:
Array ( [0] => Array ( [0] => [1] => 1 [2] => [3] => 108 [4] => ) )
期望输出
Array ( [0] => Array ( [0] => 1 [1] => 108 [2] => 101 ) )
问题分析
之前的操作逻辑有误:
array_filter($userids)默认只过滤外层数组的空元素,但你的外层元素都是非空数组,所以这一步等于没执行。array_unique处理多维数组时,是判断整个内层数组是否重复,而非内层里的单个元素,因此达不到目标去重效果。
正确解决方案
// 收集所有内层数组的非空元素 $allValues = []; foreach ($userids as $innerArr) { // 过滤内层数组的空值,如需保留0等特殊值可自定义回调 $filteredInner = array_filter($innerArr); $allValues = array_merge($allValues, $filteredInner); } // 去重并重置索引 $result = array_values(array_unique($allValues)); print_r($result);
代码说明
- 遍历外层数组,对每个内层数组用
array_filter移除空值(默认移除""、null、false、0等,若只需移除空字符串,可改成array_filter($innerArr, fn($val) => $val !== ''))。 - 将所有过滤后的非空值合并成一个一维数组。
- 用
array_unique去重,再用array_values重置数组索引,得到连续的索引序列。
内容的提问来源于stack exchange,提问作者Sanad Cal
相关产品推荐
相关产品推荐

