Я хотел бы проверить, есть ли у моего массива какие-либо дубликаты и вернуть дублированные значения в массив. Я хочу, чтобы это было максимально эффективно.
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 позиций
это будет ~ 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; }