You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);

代码说明

  1. 遍历外层数组,对每个内层数组用array_filter移除空值(默认移除""、null、false、0等,若只需移除空字符串,可改成array_filter($innerArr, fn($val) => $val !== ''))。
  2. 将所有过滤后的非空值合并成一个一维数组。
  3. 用array_unique去重,再用array_values重置数组索引,得到连续的索引序列。

内容的提问来源于stack exchange,提问作者Sanad Cal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 23:00:42