W3docs

Guide complet de la fonction PHP array_uintersect_assoc

Apprenez comment PHP array_uintersect_assoc() calcule l'intersection de tableaux avec vérification d'index et un callback de comparaison de valeurs.

array_uintersect_assoc() calcule l'intersection de deux tableaux ou plus avec une vérification d'index supplémentaire, où les valeurs sont comparées par un callback que vous fournissez, mais les clés sont comparées par la comparaison intégrée (souple). Elle renvoie les entrées du premier tableau dont la clé et la valeur apparaissent également dans chaque autre tableau.

Le « u » dans le nom signifie comparaison de valeurs définie par l'utilisateur ; le suffixe _assoc signifie les clés sont également vérifiées. Ainsi, un élément survit uniquement lorsque les deux conditions suivantes sont vraies :

  • sa clé existe dans tous les autres tableaux (comparée par la comparaison standard de PHP), et
  • votre callback indique que sa valeur est égale à l'élément correspondant dans chaque autre tableau.

Cela en fait le cousin strict de array_intersect(), qui ignore les clés et utilise la comparaison de chaînes. Utilisez array_uintersect_assoc() lorsque la correspondance des clés est importante et que vous avez besoin d'une correspondance de valeurs personnalisée — par exemple une correspondance insensible à la casse, la comparaison d'objets, ou la correspondance de nombres avec une tolérance.

Syntaxe

array_uintersect_assoc(array $array1, array $array2, ...$arrays, callable $value_compare_func): array

Le callback est toujours le dernier argument. Tout ce qui le précède est un tableau à intersecter.

Paramètres

ParamètreDescription
$array1Le tableau de base. Les clés et valeurs de ce tableau sont préservées dans le résultat.
$array2, ...Un ou plusieurs tableaux à comparer à $array1.
$value_compare_funcUn callback qui compare deux valeurs et renvoie un entier.

Valeur de retour

Un tableau associatif contenant chaque entrée de $array1 dont la clé est présente dans tous les autres tableaux et dont la valeur est considérée comme égale par le callback dans l'ensemble d'entre eux. Les clés sont préservées depuis $array1.

La fonction de callback

Le callback reçoit deux valeurs et doit renvoyer un entier qui les ordonne, exactement comme les fonctions de comparaison utilisées par usort() :

  • 0 lorsque les deux valeurs sont considérées comme égales,
  • un nombre négatif (< 0) lorsque la première est « inférieure à » la seconde,
  • un nombre positif (> 0) lorsque la première est « supérieure à » la seconde.

Deux valeurs sont traitées comme correspondantes uniquement lorsque le callback renvoie 0. Les fonctions intégrées telles que strcasecmp() (comparaison de chaînes insensible à la casse) et strcmp() respectent déjà ce contrat, c'est pourquoi elles peuvent être passées directement.

Exemples

Exemple 1 : Intersection de base sur trois tableaux

php— editable, runs on the server

Résultat :

Array
(
    [c] => cherry
)

Seul c => cherry survit. apple est dans $array1 et $array3 mais absent de $array2 ; banana est dans $array1 et $array2 mais absent de $array3. Seul cherry apparaît sous la même clé c dans les trois tableaux, c'est donc le seul résultat. Notez que la clé c est préservée depuis $array1.

Exemple 2 : Correspondance de valeurs insensible à la casse

php— editable, runs on the server

Résultat :

Array
(
    [c] => Cherry
)

Les valeurs diffèrent par la casse entre les tableaux (Cherry vs cherry), mais comme strcasecmp compare de manière insensible à la casse, le callback les signale quand même comme égales. Le résultat conserve la valeur telle qu'elle apparaît dans $array1 (Cherry).

Exemple 3 : Pourquoi la vérification d'index est importante

La partie « assoc » est plus facile à voir lorsque la même valeur se trouve sous des clés différentes :

<?php

$array1 = array('x' => 'red', 'y' => 'green', 'z' => 'blue');
$array2 = array('x' => 'red', 'w' => 'green', 'z' => 'BLUE');

$result = array_uintersect_assoc($array1, $array2, "strcasecmp");

print_r($result);

?>

Résultat :

Array
(
    [x] => red
    [z] => blue
)

red correspond car il partage la clé x dans les deux tableaux. blue/BLUE correspond car ils partagent la clé z et strcasecmp ignore la casse. Mais green est supprimé : il se trouve sous la clé y dans le premier tableau et sous la clé w dans le second, donc les clés ne s'alignent pas. Si vous utilisiez le simple array_uintersect() ici, green serait inclus car les clés seraient ignorées.

Fonctions associées

Conclusion

array_uintersect_assoc() conserve les entrées du premier tableau dont la clé apparaît dans chaque autre tableau et dont la valeur est considérée comme égale par le callback dans l'ensemble d'entre eux. Utilisez-la lorsque les clés sont significatives et que la correspondance de valeurs nécessite une logique personnalisée. Si vous avez également besoin de contrôler la façon dont les clés sont comparées, utilisez array_uintersect_uassoc() ; si la comparaison de valeurs par chaîne est suffisante, le plus simple array_intersect_assoc() fait l'affaire.

Pratique

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