Проверка и возврат дубликатов массива php

Я хотел бы проверить, есть ли у моего массива какие-либо дубликаты и вернуть дублированные значения в массив. Я хочу, чтобы это было максимально эффективно.

Example :$array = array(1,2,2,4,5) function returndup($array) should return 2 ; if array is array(1,2,1,2,5); it should return an array with 1,2 

Также начальный массив всегда имеет 5 позиций

Solutions Collecting From Web of "Проверка и возврат дубликатов массива php"

это будет ~ 100 раз быстрее, чем array_diff

 $dups = array(); foreach(array_count_values($arr) as $val => $c) if($c > 1) $dups[] = $val; 

Вы можете получить разницу между исходным массивом и копией без дубликатов, используя array_unique и array_diff_assoc :

 array_diff_assoc($arr, array_unique($arr)) 

Вы можете сделать так:

 function showDups($array) { $array_temp = array(); foreach($array as $val) { if (!in_array($val, $array_temp)) { $array_temp[] = $val; } else { echo 'duplicate = ' . $val . '<br />'; } } } $array = array(1,2,2,4,5); showDups($array); 

Вывод:

 duplicate = 2 
 function array_dup($ar){ return array_unique(array_diff_assoc($ar,array_unique($ar))); } 

Должен сделать трюк.

в дополнение к ответу gumbo:

 function returndup($arr) { return array_diff_key($arr, array_unique($arr)); } 
 function returndup($array) { $results = array(); $duplicates = array(); foreach ($array as $item) { if (in_array($item, $results)) { $duplicates[] = $item; } $results[] = $item; } return $duplicates; }