La fonction array_diff de PHP
La fonction array_diff en PHP compare des tableaux et retourne les valeurs présentes dans le premier tableau mais absentes des autres.
La fonction array_diff en PHP est une fonction native qui compare des tableaux et retourne les valeurs présentes dans le premier tableau mais absentes de tous les autres. Elle est utile chaque fois que vous avez besoin de la différence ensembliste entre des listes — par exemple, comparer des données issues d'une base de données avec des valeurs soumises via un formulaire, ou identifier les éléments supprimés entre deux instantanés d'une liste.
Ce chapitre explique comment array_diff fonctionne, sa syntaxe, la gestion des clés et la comparaison des valeurs, ainsi que les pièges courants. Il fait partie du sujet tableaux PHP.
Fonctionnement de array_diff
La fonction array_diff compare deux tableaux ou plus et retourne un nouveau tableau contenant les valeurs présentes dans le premier tableau mais dans aucun des tableaux suivants. Deux points sont essentiels à comprendre :
- La comparaison est basée sur les valeurs ; les clés sont ignorées. Seules les valeurs sont comparées, mais les clés du premier tableau sont conservées dans le résultat (elles ne sont pas réindexées).
- Les valeurs sont comparées en tant que chaînes. En interne, PHP considère deux éléments comme égaux lorsque
(string) $a === (string) $b. Ainsi, l'entier1et la string"1"sont considérés comme la même valeur.
Syntaxe
La syntaxe de la fonction array_diff est la suivante :
Syntaxe de la fonction PHP array_diff
array array_diff (array $array1, array $array2 [, array $... ]);Le paramètre array1 est le premier tableau — celui dont vous souhaitez conserver les valeurs. Le paramètre array2 (et les tableaux supplémentaires éventuels) sont les tableaux avec lesquels comparer. La fonction retourne les valeurs de array1 qui ne se trouvent dans aucun des autres tableaux.
Exemples
Voici quelques exemples illustrant l'utilisation de la fonction array_diff dans votre code PHP.
Exemple PHP d'utilisation de la fonction array_diff
Ce code produira la sortie suivante :
Array ( [0] => 1 )Comme vous pouvez le constater, la fonction array_diff a retourné la valeur 1, qui est présente dans $array1 mais pas dans $array2. Notez que la clé d'origine (0) du premier tableau est préservée.
Exemple PHP avec des valeurs string (sensibilité à la casse)
Ce code produira la sortie suivante :
Array ( [1] => Banana )Dans cet exemple, la comparaison des chaînes est sensible à la casse. Puisque 'Banana' ne correspond pas exactement à 'banana', il est retourné comme différence. La clé 1 (position d'origine de Banana) est conservée dans le résultat.
Comparaison avec plusieurs tableaux
Vous pouvez passer plus de deux tableaux. Une valeur n'est conservée que si elle est absente de chacun des autres tableaux :
<?php
$array1 = [1, 2, 3, 4, 5];
$array2 = [2, 4];
$array3 = [5];
$result = array_diff($array1, $array2, $array3);
print_r($result);
?>Résultat :
Array ( [0] => 1 [2] => 3 )Les valeurs 2 et 4 sont supprimées par $array2, et 5 est supprimé par $array3, laissant 1 et 3 avec leurs clés d'origine.
Réindexation du résultat
Les clés d'origine étant préservées, le résultat peut présenter des lacunes dans ses clés numériques. Si vous avez besoin d'une liste proprement indexée de façon séquentielle, encapsulez l'appel dans array_values() :
<?php
$result = array_values(array_diff([1, 2, 3], [2]));
print_r($result);
?>Résultat :
Array ( [0] => 1 [1] => 3 )Piège : comparaison souple basée sur les chaînes
Les éléments étant comparés en tant que chaînes, des types mixtes peuvent correspondre de façon inattendue :
<?php
$result = array_diff(['1', '2', 3], [1, 2]);
print_r($result);
?>Résultat :
Array ( [2] => 3 )Ici, '1' correspond à 1 et '2' correspond à 2 (comparaison de chaînes), de sorte que seul 3 reste. Les objets et les tableaux utilisés comme valeurs déclenchent un avertissement, car ils ne peuvent pas être convertis proprement en chaîne.
Fonctions associées
array_diff compare uniquement les valeurs. PHP propose des variantes pour différents besoins :
array_diff_key()— compare les clés plutôt que les valeurs.array_diff_assoc()— compare à la fois les clés et les valeurs.array_intersect()— l'opposé : retourne les valeurs présentes dans tous les tableaux.array_merge()— combine des tableaux plutôt que de les soustraire.
Conclusion
La fonction array_diff est un outil utile pour comparer des tableaux et trouver les différences entre eux. Que vous travailliez avec des données provenant d'une base de données ou que vous compariez simplement des listes de valeurs, la fonction array_diff peut vous aider à trouver rapidement et facilement les valeurs uniques à un tableau. En utilisant cette fonction dans votre code PHP, vous pouvez rationaliser votre processus de développement et faciliter la recherche et le traitement des données dont vous avez besoin.