W3docs

Fonction PHP Intersect : Guide de array_intersect

Découvrez la fonction array_intersect() de PHP : syntaxe, comparaison, préservation des clés et exemples pratiques.

La fonction array_intersect() compare deux tableaux ou plus et retourne les valeurs qu'ils ont tous en commun. C'est l'une des opérations ensemblistes les plus utiles de PHP — pratique dès que vous avez besoin de répondre à la question « quels éléments apparaissent dans toutes les listes ? », par exemple pour trouver des tags partagés, des permissions communes ou des produits présents dans deux catalogues.

Ce chapitre couvre la syntaxe, le fonctionnement réel de la comparaison et de la préservation des clés, les pièges fréquents (comparaison souple, seules les valeurs étant comparées) et des exemples exécutables.

Syntaxe

array_intersect(array $array, array ...$arrays): array
  • $array — le tableau dont les valeurs sont vérifiées par rapport à tous les autres.
  • ...$arrays — un ou plusieurs tableaux supplémentaires à comparer.

La fonction retourne un nouveau tableau contenant chaque entrée du premier tableau dont la valeur est présente dans tous les autres tableaux. Les tableaux d'origine ne sont pas modifiés.

Deux points essentiels à retenir :

  • Seules les valeurs sont comparées, pas les clés. Les clés sont ignorées lors de la correspondance, mais les clés du premier tableau sont préservées dans le résultat.
  • La comparaison est souple par défaut. En interne, PHP compare les éléments en tant que strings : (string) $a === (string) $b. Ainsi, l'entier 1 et la string "1" sont considérés comme égaux. Utilisez array_intersect_assoc() quand les clés doivent aussi correspondre, ou array_intersect_key() pour effectuer l'intersection par clés plutôt que par valeurs.

Si l'un des arguments est un array vide, le résultat est toujours vide — rien ne peut être commun à une liste sans éléments.

Exemples

Exemple 1 : Intersection de deux tableaux

Comparez deux tableaux et conservez uniquement les valeurs présentes dans les deux.

php— editable, runs on the server

Sortie :

Array
(
    [2] => c
    [3] => d
)

"c" et "d" apparaissent dans les deux tableaux. Remarquez les clés : 2 et 3 proviennent de $array1, le premier argument — array_intersect() conserve les clés d'origine plutôt que de les renuméroter. Si vous avez besoin d'un index propre 0, 1, 2 …, enveloppez le résultat dans array_values().

Exemple 2 : Intersection de plusieurs tableaux

Vous pouvez passer autant de tableaux que vous le souhaitez. Une valeur n'est conservée que si elle apparaît dans chacun d'eux.

php— editable, runs on the server

Sortie :

Array
(
)

Le résultat est vide : aucune valeur unique n'est partagée par les trois tableaux. "c"/"d" sont absents de $array3, et "e"/"f" sont absents de $array1.

Exemple 3 : Piège de la comparaison souple

Les éléments étant comparés en tant que strings, les nombres et leurs équivalents sous forme de string correspondent. C'est le comportement qui surprend le plus souvent.

<?php

$numbers = array(1, 2, 3, 4);
$strings = array("2", "4", "6");

$result = array_intersect($numbers, $strings);

print_r($result);

?>

Sortie :

Array
(
    [1] => 2
    [3] => 4
)

L'entier 2 a correspondu à la string "2", et 4 à "4" — même s'ils sont de types différents. Les valeurs retournées proviennent du premier tableau, donc elles restent des entiers ici. Si la correspondance exacte de type est importante, filtrez le résultat vous-même ou comparez avec une logique plus stricte.

Quand l'utiliser

Faites appel à array_intersect() quand vous souhaitez obtenir les valeurs communes entre plusieurs listes. Quelques cas pratiques :

  • Trouver les rôles qu'un utilisateur possède dans les deux ensembles de permissions.
  • Afficher les produits présents dans deux inventaires de boutiques.
  • Vérifier quels champs demandés sont effectivement autorisés (array_intersect($requested, $whitelist)).

Pour l'opération inverse — les valeurs qui ne sont pas partagées — consultez array_diff(). Pour combiner des tableaux au lieu de les intersecter, utilisez array_merge(), et pour tester la présence d'une seule valeur, utilisez in_array().

Conclusion

array_intersect() retourne les valeurs présentes dans chaque tableau que vous lui fournissez, en préservant les clés du premier argument et en comparant les éléments de façon souple en tant que strings. Pensez à utiliser array_intersect_assoc() ou array_intersect_key() lorsque les clés ont de l'importance, et array_values() si vous souhaitez que le résultat soit réindexé.

Pratique

Pratique
Que fait la fonction array_intersect() en PHP ?
Que fait la fonction array_intersect() en PHP ?
Was this page helpful?