2010-08-10 7 views
18

Ich möchte überprüfen, ob mein Array Duplikate hat und die duplizierten Werte in einem Array zurückgeben. Ich möchte, dass dies so effizient wie möglich ist.Überprüfen und Rückgabe von Duplikaten array 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 

Auch die anfängliche Array ist immer 5 Positionen lange

Antwort

53

dies wird ~ 100-mal schneller als array_diff

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

zurückgegeben Wurde ein sehr schnelles benckmark und für mich ist Ihre Methode nur herauskommen doppelt so schnell wie die array_diff-Methode von JAL, nicht 100-mal schneller. – Dom

+1

Kopf hoch. Funktioniert nicht für Strings. – peter

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

     $results[] = $item; 
    } 

    return $duplicates; 
} 
+0

Nicht, was das OP fragte. Sie sagten, es sollte in der Lage sein, mehr als einen Wert zurückzugeben. –

+0

Jetzt gibt es ein Array von Duplikaten zurück. Im ersten Post gab es keinen Hinweis, dass mehrere Duplikate zurückgegeben werden müssen, also beschuldige mich nicht! – Ronn0

+1

Eigentlich gab es: "Wenn Array ist Array (1,2,1,2,5); sollte es ein Array mit 1,2" – ToolmakerSteve

9

Sie können den Unterschied des ursprünglichen Arrays erhalten und eine Kopie ohne Duplikate mit array_unique und array_diff_assoc:

array_diff_assoc($arr, array_unique($arr)) 
3
function array_dup($ar){ 
    return array_unique(array_diff_assoc($ar,array_unique($ar))); 
} 

Sollte der Trick tun.

1

zusätzlich zu Gumbo Antwort:

function returndup($arr) 
{ 
    return array_diff_key($arr, array_unique($arr)); 
} 
3

Sie können wie folgt tun:

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); 

Ausgang:

duplicate = 2