我有一个排序数组,其中包含人的名字。 这个数组有很多相同的名字。
我想只输出重复的名字。
实施例,
输入数组:
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 }
答案 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) });
做到这一点,但应该足以让你开始。