HOWTO · PHP
Supprimer les valeurs en double d'un tableau en PHP
Cet article présente comment supprimer les valeurs en double d'un tableau en PHP. Il inclut la fonction array_unique().
Sur cette page
Pour supprimer les valeurs répétées d’un tableau PHP, appelez array_unique() en lui passant le tableau. La fonction renvoie un tableau contenant la première valeur de chaque groupe considéré comme égal. Le résultat conserve les clés associées à ces premières occurrences : supprimer les doublons ne produit donc pas nécessairement des indices numériques consécutifs.
Supprimer les valeurs en double avec array_unique()
La fonction accepte un tableau et un indicateur de comparaison facultatif. Sa forme de base est array_unique($array). Par exemple, si une liste contient "red", "blue", "red", la liste renvoyée contient le premier "red" et "blue". Le tableau d’origine n’est pas trié et l’opération ne modifie pas l’ordre relatif des valeurs conservées. Affectez le tableau renvoyé à une variable si vous souhaitez continuer à utiliser la version sans doublons :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
$colors = ["red", "blue", "red", "green", "blue"];
$uniqueColors = array_unique($colors);
Comprendre quelle valeur et quelle clé sont conservées
Lorsque des valeurs sont considérées comme égales selon l’indicateur choisi, array_unique() conserve la première valeur rencontrée et supprime les suivantes qui lui correspondent. Dans un tableau indexé, la suppression d’un élément laisse un trou dans les clés. Dans un tableau associatif, chaque valeur conservée garde sa clé d’origine. C’est utile lorsque les clés identifient des enregistrements ou des noms, mais cela peut surprendre un code qui s’attend à trouver les indices 0, 1, 2, ....
La fonction supprime les valeurs en double ; elle ne trie ni par valeur ni par clé. Si l’ordre de sortie compte, gardez à l’esprit que les valeurs conservées restent dans leur ordre relatif d’origine. Choisissez un indicateur de comparaison selon la façon dont les valeurs doivent être considérées comme égales, et non selon l’ordre d’affichage souhaité.
Choisir un indicateur de comparaison
L’argument facultatif $flags sélectionne le mode de comparaison. Par défaut, SORT_STRING compare les valeurs sous forme de chaînes. SORT_REGULAR utilise les règles de comparaison habituelles de PHP, SORT_NUMERIC compare les valeurs numériquement et SORT_LOCALE_STRING compare les chaînes selon la locale active. Un indicateur détermine quelles valeurs sont considérées comme des doublons ; il ne trie pas le tableau renvoyé. Les tableaux contenant plusieurs types peuvent donc être dédupliqués différemment selon l’indicateur. Choisissez un mode adapté au sens des données et ne supposez pas qu’une comparaison numérique réorganisera les valeurs.
Réindexer le résultat si nécessaire
Si le code qui utilise le résultat a besoin d’une liste aux clés numériques consécutives, transmettez le tableau dédupliqué à array_values(). Cette fonction crée un nouveau tableau indexé numériquement tout en conservant l’ordre des valeurs retenues. Gardez les clés lorsqu’elles ont un sens, par exemple des identifiants de produit ou des libellés ; ne réindexez que si le code appelant attend une simple liste. La réindexation est une étape distincte : array_unique() ne l’effectue pas automatiquement.
Vérifier le résultat avec un exemple PHP
Exécutez cet exemple complet pour examiner les valeurs conservées et l’effet de la réindexation. Il affiche les résultats avec des libellés qui restent en anglais dans le code inchangé :
$items = ["first" => "pear", "second" => "plum", "third" => "pear", "fourth" => "lime"];
$uniqueItems = array_unique($items);
$listItems = array_values($uniqueItems);
echo "Unique values with original keys:\n";
print_r($uniqueItems);
echo "Same values with consecutive keys:\n";
print_r($listItems);
Le premier résultat conserve les clés first, second et fourth ; l’entrée pear ultérieure est supprimée. Le résultat réindexé contient ces mêmes valeurs dans le même ordre, sous des clés numériques consécutives. Cette distinction aide à déterminer s’il faut conserver les clés des enregistrements ou préparer une liste pour du code qui attend des indices numériques classiques.