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

PHP如何移除数组中元素顺序不同的重复子数组?

PHP中实现元素组合唯一的数组去重

问题原因

你用array_unique($array, SORT_REGULAR)没效果,是因为这个方法会严格按照数组的元素顺序判定重复。像[2,48]和[48,2]这种元素相同但顺序不同的子数组,会被当成两个不同元素,所以去重失败。

解决方案

要实现“元素组合唯一”的去重,核心是把每个子数组的元素统一顺序,生成唯一标识,再通过标识过滤重复项。下面是两种可行的实现方式:

方式一:遍历数组,手动记录已出现的组合

这种方法可以保留原数组中第一次出现的子数组及其索引:

$originalArray = [[2,48],[48,2],[19,31],[31,19]];
$uniqueArray = [];
$seen = [];

foreach ($originalArray as $index => $subArray) {
    // 复制子数组并排序,统一元素顺序
    $temp = $subArray;
    sort($temp);
    // 生成唯一标识(用逗号拼接成字符串)
    $key = implode(',', $temp);
    
    if (!isset($seen[$key])) {
        $seen[$key] = true;
        // 保留原数组的索引和子数组
        $uniqueArray[$index] = $subArray;
    }
}

print_r($uniqueArray);

执行后会得到和你期望一致的结果,只保留[2,48]和[19,31],且索引为原数组中的0和2。

方式二:结合array_map与序列化去重

如果不需要保留原索引,可以用更简洁的链式操作:

$originalArray = [[2,48],[48,2],[19,31],[31,19]];

// 1. 给每个子数组排序,然后序列化
$processed = array_map(function($item) {
    sort($item);
    return serialize($item);
}, $originalArray);

// 2. 去重
$uniqueProcessed = array_unique($processed);

// 3. 反序列化回数组
$uniqueArray = array_map('unserialize', $uniqueProcessed);

print_r($uniqueArray);

这种方法会得到索引重置后的唯一数组,元素组合同样符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:05:22