2010-08-10 9 views
18

Je voudrais vérifier si mon tableau a des doublons et retourner les valeurs dupliquées dans un tableau. Je veux que ce soit aussi efficace que possible.Vérifier et retourner les doublons 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 

De plus, le tableau initial est toujours 5 positions à long

Répondre

53

ce sera environ 100 fois plus rapide que array_diff

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

A fait un benckmark très rapide et pour moi votre méthode sort seulement deux fois plus vite que la méthode array_diff de JAL, pas 100 fois plus vite. – Dom

+1

Heads up. Ne fonctionne pas pour les chaînes. – 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

Pas ce que l'OP a demandé. Ils ont dit qu'il devrait être en mesure de retourner plus d'une valeur. –

+0

Maintenant, il retourne un tableau de doublons. Dans le premier post, il n'y avait aucun avis qui est nécessaire pour retourner plusieurs doublons, alors ne me blâmez pas! – Ronn0

+1

En fait, il y avait: "si array est array (1,2,1,2,5); il devrait retourner un tableau avec 1,2" – ToolmakerSteve

9

Vous pouvez obtenir la différence du tableau original et une copie sans doublons en utilisant array_unique et 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))); 
} 

Devrait faire l'affaire.

1

en plus de la réponse de gombo:

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

Vous pouvez faire comme ceci:

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

Sortie:

duplicate = 2