У меня есть отсортированный массив, который содержит имена людей. В этом массиве много имен, которые одинаковы.
Я хочу выводить только дубликаты имен.
Пример,
входной массив:
массив ( [0] => Аббас [1] => Абхай [2] => Абхинав [3] => Абхишек [4] => Адитья [5] => Ахмед [6] => Ахмед [7] => Ajay [8] => Ajay }
Он должен вернуться
массив ( [5] => Ахмед [6] => Ахмед [7] => Ajay [8] => Ajay }
Используйте этот код:
# 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" }
Вы можете использовать эту функцию http://php.net/manual/en/function.array-unique.php, чтобы получить массив без дублирования значений, затем вы можете использовать эту функцию http://www.php.net/manual /en/function.array-intersect.php, чтобы найти различия, поддерживая связь ключей.
Попробуйте array_reduce:
http://php.net/manual/en/function.array-reduce.php
Создайте обратный вызов, который заполняет массив, используя значения из $ input как keys, и соответственно увеличивает их. А затем отфильтруйте те, которые появляются более одного раза.
Используя array_count_values()
чтобы подсчитать все в массиве, затем фильтруйте полученный массив, чтобы показать только те, где больше 1:
$input = array(.... your names here ....); $counts = array_count_values($input); $duplicates = array_filter($counts, function element { return ($element > 1) });
Делать это с головы, но должно быть достаточно, чтобы вы начали.