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

如何查找数组中指定键的重复值?附示例数组

嘿,我来帮你搞定这个查找多维数组中指定键重复值的需求!看你给出的是PHP风格的数组,我整理了两种日常开发里常用的实现方案,按需选用就行:

方法一:提取值+统计频次(简洁高效)

这种方法利用PHP内置函数实现,代码简洁且性能出色,适合大多数常规场景。核心思路是先把目标键的所有值提取出来,统计每个值的出现次数,最后过滤出重复项。

// 你的原始多维数组
$originalArray = [
    ['sku_code_part_id' => 1, 'part_label' => 'blue', 'part_value' => 'BLU'],
    ['sku_code_part_id' => 2, 'part_label' => 'Orange', 'part_value' => 'ORG'],
    ['sku_code_part_id' => 3, 'part_label' => 'Orange', 'part_value' => 'ORG'],
    ['sku_code_part_id' => 4, 'part_label' => 'Orange', 'part_value' => 'ORG'],
    ['sku_code_part_id' => 5, 'part_label' => 'Green', 'part_value' => 'GRE']
];

// 指定要检查重复的目标键,比如这里选*part_label*或*part_value*
$targetKey = 'part_label';

// 步骤1:提取所有目标键对应的值
$values = array_column($originalArray, $targetKey);

// 步骤2:统计每个值的出现次数
$valueCounts = array_count_values($values);

// 步骤3:过滤出出现次数>1的重复值
$duplicateValues = array_filter($valueCounts, function($count) {
    return $count > 1;
});

// 如果你需要获取重复值对应的完整数组项,再做一次筛选
$duplicateItems = array_filter($originalArray, function($item) use ($duplicateValues, $targetKey) {
    return isset($duplicateValues[$item[$targetKey]]);
});

// 输出结果示例
print_r($duplicateValues); // 输出:Array ( [Orange] => 3 )
print_r($duplicateItems); // 输出sku_code_part_id为2、3、4的三个完整数组项

方法二:遍历实时记录(内存友好,适合超大数组)

如果你的数组体量特别大,不想一次性提取所有值占用过多内存,可以用边遍历边记录的方式,实时收集重复项,内存占用更低。

$originalArray = [/* 你的原始数组内容 */];
$targetKey = 'part_label';

$seenValues = [];
$duplicateItems = [];

foreach ($originalArray as $item) {
    $currentValue = $item[$targetKey];
    if (isset($seenValues[$currentValue])) {
        // 已见过该值,直接加入重复项列表
        $duplicateItems[] = $item;
        // 第一次发现重复时,把首次出现的项也加入(按需开启)
        if ($seenValues[$currentValue] === true) {
            $firstOccurrence = array_filter($originalArray, function($i) use ($targetKey, $currentValue) {
                return $i[$targetKey] === $currentValue;
            });
            $duplicateItems = array_merge($duplicateItems, $firstOccurrence);
            // 标记为已处理,避免重复添加首次项
            $seenValues[$currentValue] = false;
        }
    } else {
        // 首次遇到该值,标记为已见过
        $seenValues[$currentValue] = true;
    }
}

// 对重复项去重(避免首次项被多次添加)
$duplicateItems = array_unique($duplicateItems, SORT_REGULAR);

print_r($duplicateItems);

小提示

  • 如果你只需要重复的值本身,不需要完整数组项,方法一的$duplicateValues就能满足需求;
  • 如果需要完整的重复数组项,两种方法都可以,数组体量小选方法一,体量大选方法二更省内存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:56:48