W3docs

Comprendre la fonction PHP array_intersect_uassoc

Découvrez array_intersect_uassoc() en PHP : calcul d'intersection de tableaux avec comparaison de clés personnalisée via callback.

array_intersect_uassoc() calcule l'intersection de deux tableaux ou plus — elle retourne les entrées du premier tableau dont la valeur ET la clé apparaissent également dans chacun des autres tableaux. Ce qui rend cette variante spéciale, c'est le u dans son nom : vous fournissez un callback défini par l'utilisateur qui décide quand deux clés sont considérées comme égales. Les valeurs sont toujours comparées avec la comparaison intégrée de PHP (souple, avec conversion en string).

Cette page explique le fonctionnement de la fonction, parcourt un exemple vérifié et montre quand l'utiliser à la place des autres variantes array_intersect_*.

Syntaxe

array_intersect_uassoc(
    array $array,
    array ...$arrays,
    callable $key_compare_func
): array
  • $array — le tableau à comparer ; ses entrées apparaissent dans le résultat.
  • ...$arrays — un ou plusieurs tableaux à comparer au premier.
  • $key_compare_func — un callback qui compare deux clés. Il doit retourner un entier inférieur, égal ou supérieur à 0 selon que la première clé est considérée comme inférieure, égale ou supérieure à la seconde (le même contrat qu'un comparateur usort).

La fonction retourne un nouveau tableau contenant les entrées correspondantes de $array, en préservant ses clés d'origine.

Fonctionnement du callback de clé

Contrairement à array_intersect_assoc(), qui compare les clés avec ===, cette fonction délègue la comparaison des clés à votre callback. Cela vous permet d'implémenter des règles de correspondance que PHP n'offre pas nativement — clés insensibles à la casse, clés élaguées, ou ordonnancement tenant compte de la locale.

Notez la séparation des responsabilités : les clés sont comparées par votre callback, mais les valeurs sont toujours comparées par la fonction elle-même (de manière souple, en tant que strings). Si vous avez également besoin d'une comparaison de valeurs personnalisée, utilisez array_uintersect_uassoc().

Exemple

<?php

// The callback receives two keys and must return an int:
// 0 = equal, -1 = first is smaller, 1 = first is larger.
function compareKeys($key1, $key2) {
    if ($key1 === $key2) {
        return 0;
    }
    return ($key1 > $key2) ? 1 : -1;
}

$array1 = ["a" => "green", "b" => "brown", "c" => "blue", "red"];
$array2 = ["a" => "green", "yellow", "red"];

$result = array_intersect_uassoc($array1, $array2, "compareKeys");

print_r($result);

?>

Résultat :

Array
(
    [a] => green
)

Seul "a" => "green" survit, car c'est la seule entrée dont la clé et la valeur apparaissent toutes deux dans $array2 :

  • "b" => "brown" et "c" => "blue" — les clés n'existent pas dans $array2.
  • 0 => "red" dans $array1 — la valeur "red" existe dans $array2, mais à la clé 1, donc les clés (0 vs 1) ne correspondent pas.

Quand l'utiliser

Utilisez array_intersect_uassoc() lorsque vous avez besoin d'une intersection tenant compte des clés et que celles-ci nécessitent une logique de correspondance personnalisée. Un cas courant est la correspondance insensible à la casse d'en-têtes ou de colonnes :

<?php

function ci_keys($k1, $k2) {
    return strcasecmp((string) $k1, (string) $k2);
}

$config   = ["Host" => "localhost", "Port" => 8080];
$expected = ["host" => "localhost", "PORT" => 8080];

print_r(array_intersect_uassoc($config, $expected, "ci_keys"));

?>

Ceci conserve Host => localhost et Port => 8080 car le callback traite Host/host et Port/PORT comme la même clé, tandis que les valeurs correspondent toujours.

Fonctions associées

FonctionComparaison des clésComparaison des valeurs
array_intersect()ignoréeintégrée
array_intersect_assoc()===intégrée
array_intersect_key()=== (clés uniquement)ignorée
array_intersect_ukey()callback (clés uniquement)ignorée
array_intersect_uassoc()callbackintégrée
array_uintersect_uassoc()callbackcallback

Conclusion

array_intersect_uassoc() retourne les entrées du premier tableau dont la valeur et la clé apparaissent dans chacun des autres tableaux, tout en vous permettant de contrôler la correspondance des clés via un callback défini par l'utilisateur. Utilisez-la lorsqu'une intersection associative nécessite des règles de clés flexibles — comme des clés insensibles à la casse ou élaguées — et souvenez-vous que les valeurs sont toujours comparées avec la comparaison intégrée de PHP.

Exercice

Pratique
Quel est le but de la fonction array_intersect_uassoc() en PHP ?
Quel est le but de la fonction array_intersect_uassoc() en PHP ?
Was this page helpful?