W3docs

Guide complet de la fonction array_uintersect() en PHP

Découvrez comment array_uintersect() compare des tableaux avec un callback personnalisé pour retourner les valeurs communes. Syntaxe et exemples.

La fonction array_uintersect() compare les valeurs de deux tableaux ou plus et retourne les valeurs du premier tableau qui sont également présentes dans tous les autres tableaux. Ce qui la distingue de array_intersect() est le préfixe u : vous fournissez la logique de comparaison sous forme de callback, ce qui vous permet de contrôler exactement quand deux valeurs sont considérées comme égales.

Cette page couvre la syntaxe, le fonctionnement du callback de comparaison, des exemples exécutables et les cas où utiliser cette fonction plutôt que ses équivalents plus simples.

Syntaxe

array_uintersect(
    array $array1,
    array $array2,
    array ...$arrays,
    callable $value_compare_func
): array
ParamètreDescription
$array1Le tableau de base. Ses clés et valeurs sont préservées dans le résultat.
$array2, ...$arraysUn ou plusieurs tableaux à comparer. Une valeur est conservée uniquement si elle apparaît dans tous les tableaux.
$value_compare_funcUn callback qui détermine quand deux valeurs sont égales. Il est toujours le dernier argument.

La fonction retourne un nouveau tableau contenant les valeurs de $array1 présentes dans tous les autres tableaux, avec les clés d'origine de $array1 préservées.

Fonctionnement du callback de comparaison

Le callback reçoit deux valeurs et doit retourner un entier :

  • une valeur inférieure à 0 si le premier argument est « inférieur » au second,
  • 0 si les deux valeurs sont considérées comme égales,
  • une valeur supérieure à 0 si le premier est « supérieur » au second.

Seule une valeur de retour de 0 compte comme une correspondance. C'est le même contrat à trois voies utilisé par les fonctions de tri comme usort(), ce qui fait de la fonction intégrée strcmp() un callback pratique pour les string.

array_uintersect() n'effectue aucune conversion de type — toute décision d'égalité passe par votre callback. Cela signifie que vous pouvez rendre la correspondance aussi souple ou aussi stricte que nécessaire (insensible à la casse, stricte sur les types, compatible avec les object, etc.).

Un callback simple pour les string ressemble à ceci :

function compare_strings($string1, $string2) {
    return strcmp($string1, $string2);
}

Exemple de base

Ici, nous calculons l'intersection de trois tableaux de noms de fruits en utilisant le callback ci-dessus :

<?php

function compare_strings($string1, $string2) {
    return strcmp($string1, $string2);
}

$array1 = array("apple", "orange", "banana");
$array2 = array("orange", "banana", "kiwi");
$array3 = array("banana", "kiwi", "grape");

$result = array_uintersect($array1, $array2, $array3, "compare_strings");

print_r($result);

?>

Résultat :

Array
(
    [2] => banana
)

Seul "banana" apparaît dans les trois tableaux. Notez que la clé est 2 — c'est son index d'origine dans $array1, préservé dans le résultat. "orange" est exclu car il est absent de $array3.

Correspondance insensible à la casse

Puisque le callback gère toute la logique de comparaison, utiliser strcasecmp() à la place rend l'intersection insensible à la casse :

<?php

$a = ["Red", "GREEN", "Blue"];
$b = ["red", "green", "yellow"];

$result = array_uintersect($a, $b, "strcasecmp");

print_r($result);

?>

Résultat :

Array
(
    [0] => Red
    [1] => GREEN
)

"Red" et "GREEN" sont conservés car strcasecmp() les considère égaux à "red" et "green". Les valeurs retournées sont celles du premier tableau, donc la casse d'origine est préservée.

Quand utiliser array_uintersect()

Utilisez cette fonction lorsque :

  • Vous avez besoin de l'intersection des valeurs de tableaux (pas des clés), et
  • Une vérification d'égalité simple ne suffit pas — les valeurs sont des object, des types mixtes ou nécessitent une correspondance floue ou normalisée.

Si vous avez seulement besoin de comparer des valeurs avec la comparaison souple par défaut de PHP, array_intersect() est plus simple. Si les clés importent également, consultez array_uintersect_assoc(), et pour la différence (plutôt que l'intersection) avec un callback, consultez array_udiff().

Principaux avantages :

  1. Trouver les éléments communs dans de nombreux tableaux en un seul appel, sans boucles manuelles.
  2. Les clés d'origine du premier tableau sont préservées pour faciliter le mappage des données.
  3. La logique de comparaison personnalisée gère les types de données complexes et les règles de correspondance spécifiques.

Conclusion

array_uintersect() est le bon outil lorsque vous avez besoin des valeurs communes de plusieurs tableaux mais que la comparaison intégrée de PHP ne correspond pas à la façon dont vous définissez l'égalité. Définissez un callback qui retourne 0 pour les valeurs égales, passez-le comme dernier argument, et la fonction retourne les valeurs correspondantes du premier tableau avec leurs clés intactes.

Pratique

Pratique
Quel est le rôle de la fonction array_uintersect() en PHP ?
Quel est le rôle de la fonction array_uintersect() en PHP ?
Was this page helpful?