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

如何筛选多维数组中仅出现一次的子数组

如何筛选多维数组中仅出现一次的子数组

嘿,我来帮你搞定这个问题!你想要的是保留多维数组里那些子数组内容不重复的项,重复的子数组只保留第一次出现的那一个,对吧?

首先得明确:PHP里没法直接把数组当作另一个数组的键来判断重复,所以我们需要把每个子数组转换成一个唯一的字符串标识,比如用serialize()或者json_encode(),这样就能轻松记录哪些子数组已经出现过了。

这里给你两种实现方式,都是符合需求的:

方法一:foreach遍历(直观易懂)

这种方式逻辑清晰,新手也能快速理解:

// 用来记录已经出现过的子数组(序列化后的字符串作为键)
$seen = [];
// 存储过滤后的结果
$filtered = [];

foreach ($a['test'] as $key => $subarray) {
    // 将子数组序列化为唯一字符串
    $serialized = serialize($subarray);
    
    if (!isset($seen[$serialized])) {
        // 如果没见过这个子数组,就加入结果集
        $filtered[$key] = $subarray;
        // 标记为已见过,避免后续重复添加
        $seen[$serialized] = true;
    }
}

// 把过滤后的结果赋值回原数组
$a['test'] = $filtered;

方法二:用array_filter实现(更简洁)

你提到正在研究array_filter(),那这个方法正好适配你的需求,利用闭包和引用变量来实现:

$seen = [];

$a['test'] = array_filter($a['test'], function($subarray) use (&$seen) {
    $serialized = serialize($subarray);
    
    // 如果已经见过这个子数组,就过滤掉
    if (isset($seen[$serialized])) {
        return false;
    }
    
    // 标记为已见过,返回true保留当前子数组
    $seen[$serialized] = true;
    return true;
});

两种方法运行后,都会得到你想要的结果:重复的子数组只会保留第一次出现的那一个,所有内容唯一的子数组都会被保留下来,而且原数组的键也会被完整保留哦~

备注:内容来源于stack exchange,提问作者Otonel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 08:44:50