从数组中获取重复条目(而不是仅删除它们)

时间:2014-07-18 20:03:47

标签: php arrays duplicates

我有一个可能有重复值的数组,我不仅要删除它们(我使用array_unique),而是在anothr数组中提取它们。

$a = array(1,2,2,3,4,4,5,6,6,6);
$b = array_unique($a); // has 1,2,3,4,5,6

我想要第三个数组($ c)只包含重复项

即[2,4,6]或[2,4,6,6](或者会这样做)

最简单的方法是什么?

我尝试了$c = array_diff($a,$b),但是给出了一个空数组,因为它从$ a中删除了$ b的所有出现次数(因为,当然,它们至少在$ b中出现一次)

我还想到了array_intersect,但它产生的数组与$ a

完全相同

在php中是否有直接功能来实现这一目标?怎么做?

2 个答案:

答案 0 :(得分:1)

您可以使用array_count_values计算每个元素的出现次数,并使用array_filter仅保留多次出现的次数。

$a = array(1,2,2,3,4,4,5,6,6,6);
$b = array_count_values($a);
$c = array_filter($b,function($val){ return $val > 1; });
$c = array_keys($c);
print_r($c);

如果您的输入数组已排序,您可以通过循环遍历数组并检查前一个元素是否等于当前元素来找到dupes

$a = array(1,2,2,3,4,4,5,6,6,6);
$dupes = array();

foreach($a as $i => $v) {
    if($i > 0 && $a[--$i] === $v)
        $dupes[] = $v;
}

print_r($dupes);

答案 1 :(得分:1)

我也在互联网上找到了这样的解决方案:

$c = array_unique( array_diff_assoc( $a, array_unique( $a ) ) );

但这似乎不容易理解