Menu

PHP array_unique() : supprimer les doublons d'un tableau

array_unique($array) supprime les valeurs en double et garde la première occurrence de chacune, avec sa clé d'origine. Réindexer le résultat, supprimer les doublons sans tenir compte de la casse, dédoublonner un tableau multidimensionnel, et compter ou trouver les doublons.

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

array_unique($array) renvoie le tableau sans les valeurs en double. La première occurrence de chaque valeur reste, sous sa clé d'origine, et les copies suivantes sont abandonnées.

Le premier résultat garde les clés 0, 1, 3 : les positions où chaque valeur est apparue pour la première fois. Entourez l'appel d'array_values() quand vous voulez une liste propre, par exemple avant json_encode.

Comment array_unique décide que deux valeurs sont identiques

Par défaut, chaque valeur est convertie en chaîne et les chaînes sont comparées. Donc 1, "1" et 1.0 comptent comme la même valeur, et la première l'emporte. Le second argument change la comparaison.

OptionDeux valeurs sont des doublons quand
SORT_STRING (défaut)(string) $a === (string) $b
SORT_REGULAR$a == $b
SORT_NUMERICelles sont égales en tant que nombres

Avec le défaut, "01" survit car la chaîne "01" n'est pas la chaîne "1". Avec SORT_REGULAR, elle est abandonnée, car "01" == 1 est vrai. La comparaison souple permet aussi au booléen true de correspondre à n'importe quelle valeur non vide. Vérifiez la sortie avant de vous y fier avec des types mélangés ; la page des opérateurs de comparaison explique les règles.

Supprimer les doublons sans tenir compte de la casse

array_unique est sensible à la casse : "PHP" et "php" sont différentes. Pour les traiter comme des doublons tout en gardant l'écriture d'origine de la première, trouvez les clés uniques sur une copie en minuscules et gardez ces clés dans l'original.

array_map construit une copie en minuscules avec les mêmes clés, array_unique garde les clés des premières occurrences, et array_intersect_key prend ces clés dans le tableau d'origine. Pour du texte accentué ou japonais, utilisez mb_strtolower à la place de strtolower.

array_unique sur un tableau multidimensionnel

Sans option, array_unique convertit chaque ligne en la chaîne "Array", si bien que toutes les lignes semblent identiques et que seule la première survit, avec un warning « Array to string conversion » pour chaque ligne. Passez SORT_REGULAR pour comparer des lignes entières. Pour garder une ligne par valeur d'un seul champ, array_column avec null et une clé d'index est plus simple.

La seconde approche garde la dernière ligne pour chaque email, car chaque ligne suivante écrase la précédente sous la même clé. La page array_column détaille la clé d'index.

Trouver et compter les valeurs en double

array_count_values() renvoie combien de fois chaque valeur apparaît. Filtrez les comptes supérieurs à un et vous avez les doublons.

Le dernier test est une ligne courante pour savoir si un tableau contient le moindre doublon.

Des valeurs uniques plus rapides pour les grands tableaux

array_unique convertit chaque valeur en chaîne avant de comparer, ce qui convient pour des milliers de valeurs. Pour une grande liste d'entiers ou de chaînes, inverser le tableau est plus rapide : les valeurs deviennent des clés, et les clés sont uniques par définition.

Les temps changent d'une exécution à l'autre, mais la version avec inversion est généralement plusieurs fois plus rapide. Elle ne fonctionne que pour des valeurs qui peuvent servir de clés (entiers et chaînes), et les chaînes numériques comme "5" reviennent sous forme d'entiers.

Questions fréquentes

array_unique garde-t-elle les clés ?

Oui. Elle garde la première occurrence de chaque valeur sous sa clé d'origine et abandonne les suivantes, donc les clés peuvent avoir des trous. Utilisez array_values(array_unique($arr)) pour les renuméroter depuis 0.

Comment utiliser array_unique sur un tableau multidimensionnel ?

Passez SORT_REGULAR pour comparer des lignes entières : array_unique($rows, SORT_REGULAR). Pour garder une ligne par valeur d'un champ, comme une ligne par email, indexez les lignes par ce champ : array_column($rows, null, 'email') garde la dernière ligne pour chaque email.

Comment supprimer les doublons sans tenir compte des majuscules et minuscules ?

Trouvez les clés uniques sur une copie en minuscules et gardez ces clés dans l'original : array_intersect_key($arr, array_unique(array_map('strtolower', $arr))). Utilisez mb_strtolower pour du texte hors ASCII.

Comment trouver quelles valeurs sont en double dans un tableau PHP ?

Comptez-les avec array_count_values($arr), puis gardez les comptes supérieurs à un : array_keys(array_filter(array_count_values($arr), fn($n) => $n > 1)). array_count_values ne fonctionne que sur les chaînes et les entiers.

Illustration des langages de programmation de Coddy

Apprendre à coder avec Coddy

COMMENCER