Comprendre la fonction PHP : array_intersect_key()
La fonction PHP array_intersect_key() compare des tableaux et retourne les valeurs dont les clés correspondent. Découvrez son fonctionnement ici.
La fonction PHP array_intersect_key() compare deux tableaux ou plus par leurs clés et retourne un nouveau tableau contenant les entrées du premier tableau dont les clés existent dans tous les autres tableaux. Fondamentalement, elle ignore complètement les valeurs — seules les clés déterminent ce qui est conservé, et les valeurs retournées sont toujours celles du premier tableau. Cette page explique comment fonctionne la fonction, quand l'utiliser et les pièges courants.
Objectif
array_intersect_key() répond à la question : « Quelles entrées de ce tableau apparaissent également — par clé — dans tous ces autres tableaux ? » Un cas d'usage courant est la liste blanche de saisies de formulaire ou de configuration : vous conservez uniquement les clés que vous autorisez explicitement et supprimez tout le reste en un seul appel.
Elle appartient à la même famille que array_intersect(), qui compare par valeur, et array_diff_key(), qui retourne les clés absentes des autres tableaux.
Syntaxe
array_intersect_key(array $array, array ...$arrays): array| Paramètre | Description |
|---|---|
$array | Le tableau dont les entrées sont conservées. Ses clés sont vérifiées par rapport à chaque autre tableau, et ses valeurs sont celles retournées. |
$arrays | Un ou plusieurs tableaux dont les clés sont comparées à $array. Leurs valeurs ne sont jamais utilisées. |
Une entrée est conservée uniquement si sa clé est présente dans tous les tableaux fournis. Les paires clé/valeur d'origine du premier tableau sont préservées dans le résultat.
Exemples
Comparer deux tableaux
Les clés communes aux deux tableaux sont a et b, donc ces entrées sont conservées. Notez que les valeurs diffèrent pour la clé b (brown contre yellow) — cela n'a pas d'importance, seule la clé doit correspondre, et la valeur provient de $array1. L'élément "red" sans clé explicite dans $array1 reçoit la clé numérique implicite 0, qui est absente de $array2, donc il est supprimé :
Array
(
[a] => green
[b] => brown
)Comparer trois tableaux
Lorsque vous passez plus de deux tableaux, une clé doit apparaître dans chaque tableau pour être conservée.
Seule la clé a est présente dans les trois tableaux. La clé b est absente de $array3 et la clé c est absente de $array2, donc toutes deux sont supprimées :
Array
(
[a] => green
)Appliquer une liste blanche à un tableau par ses clés
L'utilisation la plus pratique de array_intersect_key() est de filtrer un tableau associatif pour ne garder qu'un ensemble de clés approuvées — par exemple, n'accepter que les champs connus d'une saisie utilisateur :
<?php
$input = array(
"name" => "Ann",
"email" => "[email protected]",
"is_admin" => true, // attacker-supplied field we must ignore
);
$allowed = array("name" => "", "email" => "");
$safe = array_intersect_key($input, $allowed);
print_r($safe);
?>Les valeurs de $allowed sont sans importance — il sert uniquement de liste de clés autorisées. Le champ dangereux is_admin est supprimé :
Array
(
[name] => Ann
[email] => [email protected]
)Points importants à retenir
- Seules les clés sont comparées, jamais les valeurs. Deux entrées ayant la même clé mais des valeurs différentes correspondent quand même. Les valeurs retournées proviennent toujours du premier tableau.
- L'ordre des tableaux ne change pas quelles clés sont conservées, mais l'ordre des entrées dans le résultat suit le premier tableau.
- La comparaison des clés est sensible à la casse pour les clés string :
"A"et"a"sont des clés différentes. - Les clés numériques sont comparées en tant qu'entiers. La clé string
"1"et la clé entière1sont traitées comme la même clé, car PHP normalise les clés de tableau sous forme de chaînes numériques en entiers. - Passer un seul tableau retourne simplement ce tableau inchangé ; passer un argument qui n'est pas un tableau provoque une
TypeError.
Fonctions associées
array_intersect()— intersection par valeur au lieu de la clé.array_intersect_assoc()— correspondance à la fois sur la clé et la valeur.array_diff_key()— l'inverse : conserve les entrées dont les clés ne sont pas dans les autres tableaux.array_key_exists()— vérifier l'existence d'une seule clé.- Travailler avec les tableaux PHP — la référence complète des tableaux.