2010-08-10 27 views
18

Vorrei verificare se il mio array ha duplicati e restituire i valori duplicati in un array. Voglio che questo sia il più efficiente possibile.Controllare e restituire i duplicati 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 

Anche la matrice iniziale è sempre lunga 5 posizioni

risposta

53

questo sarà ~ 100 volte più veloce di array_diff

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

ha fatto un benckmark molto veloce e per me il tuo metodo sta uscendo solo due volte più veloce del metodo array_diff di JAL, non 100 volte più veloce. – Dom

+1

Avviso. Non funziona per le stringhe. – 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

Non è quello che ha chiesto l'OP. Hanno detto che dovrebbe essere in grado di restituire più di un valore. –

+0

Ora restituisce una matrice di duplicati. Nel primo post non c'è stato alcun avviso che debba restituire più duplicati, quindi non incolparmi! – Ronn0

+1

In realtà, c'era: "se array è array (1,2,1,2,5); dovrebbe restituire un array con 1,2" – ToolmakerSteve

9

si può ottenere la differenza della matrice originale e una copia senza duplicati utilizzando array_unique e 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))); 
} 

Dovrebbe fare il trucco.

1

in aggiunta alla risposta di gumbo:

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

Si può fare in questo modo:

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

uscita:

duplicate = 2 
Problemi correlati