Fonction PHP Array Intersect_Assoc
La fonction array_intersect_assoc en PHP compare deux tableaux ou plus et retourne uniquement les éléments correspondant à la clé et à la valeur.
La fonction PHP array_intersect_assoc() compare deux tableaux ou plus et retourne uniquement les entrées qui correspondent à la fois sur la clé et la valeur dans chaque tableau. Contrairement à array_intersect(), qui ignore les clés et ne compare que les valeurs, array_intersect_assoc() conserve une paire uniquement lorsque la même clé contient la même valeur dans tous les tableaux passés en paramètre. C'est donc l'outil idéal lorsque la position ou le libellé d'une valeur est aussi important que la valeur elle-même — par exemple pour comparer deux tableaux de configuration ou deux lignes indexées par nom de champ.
Cette page couvre la signature de la fonction, le fonctionnement réel de la comparaison (y compris un point subtil sur la façon dont les valeurs sont comparées), plusieurs exemples exécutables, les erreurs fréquentes et les fonctions associées.
Syntaxe
array_intersect_assoc(array $array, array ...$arrays): array$array— le tableau de base. Le résultat préserve ses clés et ses types de valeurs....$arrays— un ou plusieurs tableaux à comparer. Vous devez en passer au moins un.
La fonction retourne un nouveau tableau contenant chaque paire clé => valeur du premier tableau dont la clé et la valeur apparaissent également dans tous les autres tableaux.
Fonctionnement
array_intersect_assoc() parcourt chaque paire clé => valeur du premier tableau et recherche la même clé dans chacun des autres tableaux. Une paire est conservée uniquement lorsque, pour chaque autre tableau, cette clé existe et que sa valeur est égale.
Un point surprend souvent : la comparaison des valeurs n'est pas stricte (===). En interne, PHP compare les valeurs sous forme de chaînes, approximativement (string) $a === (string) $b. Ainsi, 1 (int) correspond à "1" (string) car les deux se convertissent en "1", mais false ne correspond pas à 0 (ils se convertissent respectivement en "" et "0"). Les clés, comme toujours dans les tableaux PHP, suivent les règles normales des clés de tableau.
Exemple de base
Ici, la seule paire partagée par les deux tableaux — même clé, même valeur — est "a" => "green" :
La sortie de ce code serait :
Array
(
[a] => green
)"b" est supprimé car les valeurs diffèrent (brown vs yellow), et "c" est supprimé pour la même raison (blue vs red). Le "red" sans clé dans $array1 a la clé entière 0, qui n'existe pas dans $array2, il est donc exclu lui aussi. C'est la différence avec array_intersect(), qui aurait fait correspondre red sur la valeur seule.
Comparaison de trois tableaux ou plus
Une paire doit correspondre dans tous les tableaux pour être conservée. L'ajout d'un troisième tableau réduit davantage le résultat :
<?php
$array1 = array("a" => "green", "b" => "brown", "c" => "blue");
$array2 = array("a" => "green", "b" => "yellow");
$array3 = array("a" => "green", "c" => "blue");
$result = array_intersect_assoc($array1, $array2, $array3);
print_r($result);
?>Sortie :
Array
(
[a] => green
)Seul "a" => "green" apparaît dans chaque tableau. "c" => "blue" est absent de $array2, donc il est ignoré.
Piège : comparaison de valeurs non stricte
Comme les valeurs sont comparées en tant que chaînes, des valeurs de types mixtes peuvent correspondre de manière inattendue :
<?php
$a = array("id" => 1, "active" => false);
$b = array("id" => "1", "active" => 0);
print_r(array_intersect_assoc($a, $b));
?>Sortie :
Array
(
[id] => 1
)id correspond car 1 et "1" se convertissent tous les deux en "1". Mais active est supprimé : false se convertit en "" tandis que 0 se convertit en "0", ils ne sont donc pas égaux. Si vous avez besoin d'une correspondance stricte tenant compte des types, comparez les tableaux vous-même ou utilisez array_uintersect_assoc() avec un callback personnalisé.
Quand l'utiliser
- Comparer des tableaux associatifs où une valeur n'a de sens qu'à sa clé spécifique — paramètres, champs de formulaire, structures similaires à des lignes de base de données.
- Trouver les entrées communes entre deux instantanés des mêmes données indexées.
Si vous ne vous intéressez qu'aux valeurs correspondantes quelle que soit la clé, utilisez array_intersect(). Si vous ne vous intéressez qu'aux clés correspondantes quelle que soit la valeur, utilisez array_intersect_key(). Pour l'opération inverse — les entrées présentes dans le premier tableau mais pas dans les autres, comparées sur la clé et la valeur — consultez array_diff_assoc().
Diagramme
Une représentation visuelle de la façon dont array_intersect_assoc() filtre les paires :
graph LR
A[Array 1: key-value pairs] -->|Compare keys & values| B[Array 2: key-value pairs]
B -->|Keep only matching pairs| C[Result Array]Conclusion
array_intersect_assoc() retourne les paires clé => valeur communes à tous les tableaux que vous lui fournissez, en vérifiant à la fois la clé et la valeur (comparée de manière non stricte sous forme de chaîne). Utilisez-la lorsque le libellé et la valeur d'une entrée doivent tous deux correspondre, et préférez array_intersect(), array_intersect_key() ou array_uintersect_assoc() lorsque vous avez besoin d'une correspondance uniquement sur la valeur, uniquement sur la clé ou avec une correspondance stricte personnalisée.