2010-09-11 3 views
10

Tout d'abord, je tiens à signaler à tous les chasseurs de questions en double que this question ne répond pas complètement à ma question.Comment puis-je supprimer TOUS les doublons d'un tableau en PHP?

Maintenant, j'ai un tableau. Nous dirons que le tableau est array(1, 2, 2, 3, 4, 3, 2)

Je dois supprimer les doublons. Non seulement l'un des doubles, mais tous, de sorte que le résultat sera array(1, 4)

Je regardais array_unique(), mais cela entraînera seulement array(1, 2, 3, 4)

Toutes les idées?

+0

vous pouvez désambiguïser votre question en changeant à: « Comment puis-je supprimer les doublons, _et les valeurs duplicated_, d'un tableau ? " – systemovich

Répondre

12

Vous pouvez utiliser la combinaison de array_unique, array_diff_assoc et array_diff:

array_diff($arr, array_diff_assoc($arr, array_unique($arr))) 
+0

+1 pour l'ingéniosité, bien qu'il soit difficile de lire l'intention quand vous voyez une ligne comme ça! –

+0

Ceci est significativement plus lent que l'approche de Ciprian, mais je viens de faire un benchmark rapide et c'est 4x plus lent. Un peu surprenant. –

7

function removeDuplicates($array) { 
    $valueCount = array(); 
    foreach ($array as $value) { 
     $valueCount[$value]++; 
    } 

    $return = array(); 
    foreach ($valueCount as $value => $count) { 
     if ($count == 1) { 
     $return[] = $value; 
     } 
    } 

    return $return; 
} 
+0

La première boucle pourrait être remplacée plus efficacement par $ arrayCount = array_count_values ​​($ array) –

+0

Mais +1 à vous, et bienvenue à Stack Overflow! –

+0

Merci. Je pense que l'algorithme est également important. Quelqu'un a déjà posté une solution en utilisant des fonctions PHP natives. –

Questions connexes