仅显示数组中的重复元素

时间:2011-05-13 16:37:55

标签: php arrays

我有一个排序数组,其中包含人的名字。 这个数组有很多相同的名字。

我想只输出重复的名字。

实施例,

输入数组:

Array
(
    [0] => Abbas
    [1] => Abhay
    [2] => Abhinav
    [3] => Abhishek
    [4] => Aditya
    [5] => Ahmed
    [6] => Ahmed
    [7] => Ajay
    [8] => Ajay
}

它应该返回

Array
(
    [5] => Ahmed
    [6] => Ahmed
    [7] => Ajay
    [8] => Ajay
}

4 个答案:

答案 0 :(得分:12)

使用此代码:

# assuming your original array is $arr
array_unique(array_diff_assoc($arr, array_unique($arr)));

它将返回唯一重复,但如果您想要非唯一重复,请使用:

array_diff_assoc($arr, array_unique($arr));

编辑:根据您的评论,请尝试以下代码:

$uarr = array_unique($arr);
var_dump(array_diff($arr, array_diff($uarr, array_diff_assoc($arr, $uarr))));

输出

array(4) {
  [5]=>
  string(5) "Ahmed"
  [6]=>
  string(5) "Ahmed"
  [7]=>
  string(4) "Ajay"
  [8]=>
  string(4) "Ajay"
}

答案 1 :(得分:1)

您可以使用此函数http://php.net/manual/en/function.array-unique.php来获取数组而不重复值,然后您可以使用此函数http://www.php.net/manual/en/function.array-intersect.php来查找差异,从而保持关键关联。

答案 2 :(得分:0)

尝试使用array_reduce:

http://php.net/manual/en/function.array-reduce.php

使用$ input中的值作为键来创建一个填充数组的回调,并相应地递增它们。然后过滤出现不止一次的那些。

答案 3 :(得分:0)

使用array_count_values()计算数组中的所有内容,然后过滤生成的数组以仅显示超过1的数组:

$input = array(.... your names here ....);

$counts = array_count_values($input);

$duplicates = array_filter($counts, function element { return ($element > 1) });

做到这一点,但应该足以让你开始。

相关问题