W3docs

Función PHP array_intersect_assoc

La función array_intersect_assoc en PHP compara dos o más arrays y devuelve solo los elementos que coinciden en clave y valor en todos los arrays.

La función PHP array_intersect_assoc() compara dos o más arrays y devuelve únicamente las entradas que coinciden en clave y valor en todos los arrays. A diferencia de array_intersect(), que ignora las claves y solo examina los valores, array_intersect_assoc() conserva un par únicamente cuando la misma clave contiene el mismo valor en todos los arrays que se pasan. Esto la convierte en la herramienta adecuada cuando la posición o la etiqueta de un valor importa tanto como el valor en sí — por ejemplo, al comparar dos arrays de configuración o dos filas indexadas por nombre de campo.

Esta página cubre la firma de la función, cómo funciona la comparación en la práctica (incluyendo un detalle sutil sobre cómo se comparan los valores), varios ejemplos ejecutables, errores comunes y funciones relacionadas.

Sintaxis

array_intersect_assoc(array $array, array ...$arrays): array
  • $array — el array base. El resultado preserva sus claves y tipos de valor.
  • ...$arrays — uno o más arrays con los que comparar. Se debe pasar al menos uno.

La función devuelve un nuevo array que contiene cada par clave => valor del primer array cuya clave y valor aparezcan también en todos los demás arrays.

Cómo funciona

array_intersect_assoc() recorre cada par clave => valor del primer array y busca la misma clave en todos los demás arrays. Un par sobrevive solo cuando, en cada uno de los otros arrays, esa clave existe y su valor es igual.

Un detalle que suele confundir: la comparación de valores no es estricta (===). Internamente PHP compara los valores como cadenas, aproximadamente (string) $a === (string) $b. Por tanto, 1 (int) coincide con "1" (string) porque ambos se convierten a "1", pero false no coincide con 0 (se convierten a "" y "0" respectivamente). Las claves, como siempre en los arrays de PHP, siguen las reglas normales de claves de array.

Ejemplo básico

Aquí el único par compartido por ambos arrays — misma clave, mismo valor — es "a" => "green":

php— editable, runs on the server

La salida de este código sería:

Array
(
    [a] => green
)

"b" se descarta porque los valores difieren (brown vs yellow), y "c" se descarta por la misma razón (blue vs red). El "red" sin clave en $array1 tiene la clave entera 0, que no existe en $array2, por lo que también queda excluido. Esta es la diferencia con array_intersect(), que habría emparejado red solo por el valor.

Comparar tres o más arrays

Un par debe coincidir en todos los arrays para sobrevivir. Añadir un tercer array reduce aún más el resultado:

<?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);

?>

Salida:

Array
(
    [a] => green
)

Solo "a" => "green" aparece en todos los arrays. "c" => "blue" no está en $array2, así que se descarta.

Advertencia: comparación de valores laxa

Como los valores se comparan como cadenas, los valores de tipos mixtos pueden coincidir de formas inesperadas:

<?php

$a = array("id" => 1,   "active" => false);
$b = array("id" => "1", "active" => 0);

print_r(array_intersect_assoc($a, $b));

?>

Salida:

Array
(
    [id] => 1
)

id coincide porque 1 y "1" se convierten ambos a "1". Pero active se descarta: false se convierte a "" mientras que 0 se convierte a "0", por lo que no son iguales. Si necesitas una comparación estricta con tipos, compara los arrays manualmente o usa array_uintersect_assoc() con un callback personalizado.

Cuándo usarla

  • Al comparar arrays asociativos donde un valor solo tiene sentido en su clave específica — configuraciones, campos de formulario, estructuras similares a filas de base de datos.
  • Para encontrar las entradas comunes entre dos instantáneas de los mismos datos indexados por clave.

Si solo te importa que los valores coincidan sin importar la clave, usa array_intersect(). Si solo te importa que las claves coincidan sin importar el valor, usa array_intersect_key(). Para la operación inversa — entradas presentes en el primer array pero no en los demás, comparadas por clave y valor — consulta array_diff_assoc().

Diagrama

Una representación visual de cómo array_intersect_assoc() filtra los pares:

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]

Conclusión

array_intersect_assoc() devuelve los pares clave => valor comunes a todos los arrays que se le pasan, comparando tanto la clave como el valor (con comparación laxa de cadenas). Úsala cuando tanto la etiqueta como el valor de una entrada deban coincidir, y prefiere array_intersect(), array_intersect_key() o array_uintersect_assoc() cuando necesites coincidencia solo por valor, solo por clave o con una comparación personalizada estricta.

Práctica

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