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

移除数组重复项:针对给定多维数组的技术处理请求

PHP多维数组移除重复项的实用方案

嘿,针对你这个多维数组去重的需求,我给你整理了几个实用的方案,你可以根据自己的业务场景来选择:

方案一:基于唯一主键(如id)去重(推荐)

从你给出的数组来看,每个子元素都有唯一的id字段,这种场景下用主键作为新数组的键是最高效的方式——因为数组的键天然唯一,后面的同键元素会自动覆盖前面的重复项,最后再重置索引就行。

代码示例:

// 假设你的原始多维数组是$originalArray
$uniqueArray = [];
foreach ($originalArray as $item) {
    // 用唯一的id作为新数组的键,自动去重
    $uniqueArray[$item['id']] = $item;
}
// 重置数组索引,变回数字索引的格式
$uniqueArray = array_values($uniqueArray);

方案二:完全重复的子数组去重

如果你的需求是整个子数组的所有字段都完全相同才判定为重复,那可以用序列化的方式处理:先把每个子数组转成字符串,用array_unique去重后再转回来。

代码示例:

// 将每个子数组序列化为字符串
$serializedItems = array_map('serialize', $originalArray);
// 对字符串数组去重
$uniqueSerialized = array_unique($serializedItems);
// 反序列化回多维数组
$uniqueArray = array_map('unserialize', $uniqueSerialized);

注意:这种方法的性能比第一种稍差,因为涉及序列化和反序列化操作,适合没有唯一主键但需要完全匹配的场景。

方案三:自定义多字段组合去重

如果你的去重规则是基于多个字段的组合(比如name+reference+total同时相同才判定重复),可以自己生成唯一标识键来过滤:

代码示例:

$uniqueArray = [];
foreach ($originalArray as $item) {
    // 用多个字段拼接成唯一标识,分隔符选不会出现在字段里的字符就行
    $uniqueKey = $item['name'] . '|' . $item['reference'] . '|' . $item['total'];
    // 只保留第一次出现的组合
    if (!isset($uniqueArray[$uniqueKey])) {
        $uniqueArray[$uniqueKey] = $item;
    }
}
// 重置索引
$uniqueArray = array_values($uniqueArray);

这种方式灵活性最高,能适配各种自定义的去重规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:05:08