W3docs

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ètreDescription
$arrayLe 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.
$arraysUn 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

php— editable, runs on the server

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.

php— editable, runs on the server

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ère 1 sont 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

Pratique

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