W3docs

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ámetroDescripción
$arrayEl 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.
$arraysUno 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

php— editable, runs on the server

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.

php— editable, runs on the server

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 entera 1 se 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

Práctica

Práctica
¿Qué hace la función array_intersect_key() en PHP?
¿Qué hace la función array_intersect_key() en PHP?
Was this page helpful?