如何查找数组中指定键的重复值?附示例数组
嘿,我来帮你搞定这个查找多维数组中指定键重复值的需求!看你给出的是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
相关产品推荐
相关产品推荐

