W3docs

Función PHP array_diff_assoc

La función PHP array_diff_assoc compara dos o más arrays y devuelve las diferencias entre ellos basándose en sus claves y valores.

La función array_diff_assoc() de PHP compara dos o más arrays y devuelve las entradas del primer array que no están presentes en ninguno de los demás. A diferencia de array_diff(), que solo examina los valores, array_diff_assoc() comprueba tanto la clave como el valor — por lo que un par sobrevive la comparación solo cuando ningún otro array tiene esa clave exacta emparejada con ese valor exacto. Esto la convierte en la herramienta adecuada para comparar arrays asociativos.

Esta página cubre la sintaxis, cómo funciona la coincidencia de clave + valor, la diferencia respecto a array_diff(), la particularidad de la comparación laxa (como string), y un ejemplo con múltiples arrays.

Sintaxis

array_diff_assoc(array $array, array ...$arrays): array
  • $array — el array desde el que comparar. Sus entradas supervivientes forman el resultado.
  • ...$arrays — uno o más arrays contra los que comparar.

La función devuelve un nuevo array con cada par clave/valor de $array que no aparece (con la misma clave) en ninguno de los otros arrays. Las claves se conservan en el resultado.

Cómo funciona

array_diff_assoc() recorre el primer array y, para cada par, pregunta: ¿tiene algún otro array esta misma clave con este mismo valor? Si la respuesta es sí, el par se descarta; si no, se mantiene.

Ejemplo de array_diff_assoc() en PHP

php— editable, runs on the server

Salida:

Array
(
    [b] => banana
)

Solo "b" => "banana" sobrevive: $array2 no tiene ninguna clave b. Los pares a y c coinciden tanto en clave como en valor, por lo que se eliminan. Nótese que "d" => "date" en $array2 es irrelevante — solo las entradas del primer array pueden aparecer en el resultado.

array_diff_assoc() vs array_diff()

La diferencia clave es si las claves forman parte de la comparación. Con el mismo valor bajo claves distintas, array_diff() los trata como iguales, pero array_diff_assoc() no:

<?php

$a = array("a" => "apple", "b" => "banana");
$b = array("x" => "apple");

print_r(array_diff_assoc($a, $b)); // compares key AND value
print_r(array_diff($a, $b));       // compares value only

?>

Salida:

Array
(
    [a] => apple
    [b] => banana
)
Array
(
    [b] => banana
)

array_diff_assoc() conserva "a" => "apple" porque $b almacena apple bajo la clave x, no a. array_diff() lo descarta porque el valor apple existe en algún lugar de $b.

Particularidad: la comparación se realiza como strings

Internamente array_diff_assoc() compara los valores de forma laxa convirtiéndolos a string — (string) $elem1 === (string) $elem2. Esto significa que 10 (int) y "10" (string) se consideran iguales:

<?php

$a = array("x" => 10);
$b = array("x" => "10");

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

?>

Salida:

Array
(
)

El resultado está vacío: 10 y "10" se convierten al mismo string "10". Si necesitas una comparación estricta con tipos, escribe un callback con array_udiff_assoc() (o compara los tipos tú mismo). Para comparar solo por claves, usa array_diff_key().

Comparación de más de dos arrays

Puedes pasar cualquier cantidad de arrays. Una entrada debe estar ausente en todos ellos para sobrevivir. Esto también funciona con claves numéricas:

<?php

$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");

print_r(array_diff_assoc($array1, $array2));

?>

Salida:

Array
(
    [b] => brown
    [c] => blue
    [0] => red
)

"a" => "green" coincide y se elimina. [0] => "red" sobrevive porque en $array2 el valor "red" se encuentra en la clave 1, no en 0 — por lo que el par clave/valor difiere.

Cuándo usarla

  • Comparar dos arrays de configuración o ajustes donde la clave importa (por ejemplo, detectar opciones modificadas).
  • Encontrar entradas que fueron eliminadas de una instantánea "antes" cuando importa tanto la identidad de la clave como la del valor.
  • Cualquier comparación en la que usar solo el valor (array_diff()) produciría falsos positivos.

Funciones relacionadas

Práctica

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