Entendiendo la función PHP: array_intersect_key()
La función PHP array_intersect_key() compara arrays y devuelve solo los valores con claves coincidentes. Aprende cómo usarla.
La función PHP array_intersect_key() compara dos o más arrays por sus claves y devuelve un nuevo array con las entradas del primer array cuyas claves existen en todos los demás arrays. Es importante destacar que ignora los valores por completo — solo las claves determinan qué se conserva, y los valores devueltos son siempre los del primer array. Esta página explica cómo funciona la función, cuándo utilizarla y los errores comunes que hay que evitar.
Propósito
array_intersect_key() responde a la pregunta: "¿Cuáles entradas de este array también aparecen — por clave — en todos estos otros arrays?" Un caso de uso real muy común es la lista blanca de entradas de formularios o configuraciones: se conservan solo las claves permitidas explícitamente y se descarta todo lo demás en una sola llamada.
Pertenece a la misma familia que array_intersect(), que compara por valor, y array_diff_key(), que devuelve las claves que están ausentes en los otros arrays.
Sintaxis
array_intersect_key(array $array, array ...$arrays): array| Parámetro | Descripción |
|---|---|
$array | El array del que se conservan las entradas. Sus claves se verifican contra todos los demás arrays y sus valores son los que se devuelven. |
$arrays | Uno o más arrays cuyas claves se comparan con $array. Sus valores nunca se utilizan. |
Una entrada sobrevive solo si su clave está presente en todos los arrays proporcionados. Los pares clave/valor originales del primer array se conservan en el resultado.
Ejemplos
Comparar dos arrays
Las claves compartidas por ambos arrays son a y b, por lo que esas entradas se conservan. Nótese que los valores difieren para la clave b (brown vs yellow) — eso no importa, solo la clave debe coincidir, y el valor proviene de $array1. El elemento "red" sin clave explícita en $array1 recibe la clave numérica implícita 0, que está ausente en $array2, por lo que se descarta:
Array
(
[a] => green
[b] => brown
)Comparar tres arrays
Cuando se pasan más de dos arrays, una clave debe aparecer en todos los arrays para sobrevivir.
Solo la clave a está presente en los tres arrays. La clave b no está en $array3 y la clave c no está en $array2, por lo que ambas se descartan:
Array
(
[a] => green
)Lista blanca de un array por sus claves
El uso más práctico de array_intersect_key() es filtrar un array asociativo para quedarse solo con un conjunto aprobado de claves — por ejemplo, aceptar únicamente campos conocidos de la entrada del usuario:
<?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);
?>Los valores de $allowed son irrelevantes — actúa puramente como una lista de claves permitidas. El peligroso campo is_admin es eliminado:
Array
(
[name] => Ann
[email] => [email protected]
)Aspectos a tener en cuenta
- Solo se comparan las claves, nunca los valores. Dos entradas con la misma clave pero valores diferentes siguen siendo coincidentes. Los valores devueltos provienen siempre del primer array.
- El orden de los arrays no cambia qué claves sobreviven, pero el orden de las entradas en el resultado sigue al primer array.
- La comparación de claves distingue entre mayúsculas y minúsculas para las claves de tipo string:
"A"y"a"son claves diferentes. - Las claves numéricas se comparan como enteros. La clave string
"1"y la clave entera1se tratan como la misma clave, porque PHP normaliza las claves de array con string numérico a enteros. - Pasar un único array simplemente devuelve ese array sin cambios; pasar un argumento que no es un array genera un
TypeError.
Funciones relacionadas
array_intersect()— intersección por valor en lugar de por clave.array_intersect_assoc()— coincidencia de ambos: clave y valor.array_diff_key()— el inverso: conserva las entradas cuyas claves no están en los otros arrays.array_key_exists()— verifica la existencia de una única clave.- Trabajar con arrays en PHP — la referencia completa de arrays.