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

PHP中如何移除父数组中的重复子数组?

嘿,这个问题我之前做项目的时候也碰到过,给你几个实用的PHP解决思路,亲测好用:

方法一:利用序列化+数组键唯一性去重

这个方法是最直观的思路:因为PHP数组的键是唯一的,我们可以把每个子数组序列化后作为临时数组的键,这样重复的子数组会自动被覆盖,最后再把值取出来就行。

代码示例:

// 你的原始数组
$originalArray = [
    ['key1' => 14, 'key2' => 32],
    ['key1' => 14, 'key2' => 11],
    ['key1' => 14, 'key2' => 11],
    ['key1' => 14, 'key2' => 31]
];

// 第一步:用序列化后的子数组作为键,自动去重
$temp = [];
foreach ($originalArray as $item) {
    $temp[serialize($item)] = $item;
}

// 第二步:取出值并重置索引(可选,如果你想要连续的数字索引)
$uniqueArray = array_values($temp);

// 输出结果
print_r($uniqueArray);

这个方法的优点是简单粗暴,适配大多数普通多维数组场景,像你这种子数组都是基础数值的情况完全没问题。唯一要注意的是,如果子数组里包含对象、资源这类特殊类型,序列化可能会有问题,但你的场景不用考虑这个。

方法二:一行代码搞定的简化写法

如果你喜欢简洁的写法,可以用array_map配合array_unique来实现,原理和方法一一样,只是把循环换成了内置函数链式调用:

// 用serialize的版本
$uniqueArray = array_values(array_map('unserialize', array_unique(array_map('serialize', $originalArray))));

// 或者用json_encode/json_decode的版本,效果差不多
$uniqueArray = array_values(array_map('json_decode', array_unique(array_map('json_encode', $originalArray))));

一行代码就能完成去重+重置索引,非常适合快速开发,两种写法的区别不大,选你看着顺眼的就行。

方法三:自定义判断逻辑(适合复杂场景)

如果你以后需要更灵活的去重规则(比如只根据key1去重,或者其他复杂判断),可以自己写嵌套循环来手动检查:

$uniqueArray = [];
foreach ($originalArray as $currentItem) {
    $isDuplicate = false;
    // 遍历已经去重的数组,检查当前子数组是否存在
    foreach ($uniqueArray as $existingItem) {
        // 这里可以自定义判断条件,比如只比较key1的话就改这里
        if ($existingItem['key1'] === $currentItem['key1'] && $existingItem['key2'] === $currentItem['key2']) {
            $isDuplicate = true;
            break;
        }
    }
    // 如果不是重复项,就加入结果数组
    if (!$isDuplicate) {
        $uniqueArray[] = $currentItem;
    }
}

print_r($uniqueArray);

这个方法的优点是灵活性拉满,不管以后需求怎么变,改一下判断条件就行。缺点是嵌套循环,数据量特别大的时候效率会低一点,但你的数组规模很小,完全不用担心。

以上三个方法都能帮你得到想要的结果,根据自己的习惯和场景选就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:43:48