W3docs

Entendiendo la función array_diff_uassoc de PHP

Aprende cómo funciona array_diff_uassoc en PHP para comparar arrays con verificación de claves y una función de comparación personalizada.

array_diff_uassoc() compara dos (o más) arrays con una verificación de clave adicional, y te permite proporcionar tu propia función para comparar las claves. Devuelve cada entrada del primer array cuyo par clave/valor no coincide en ninguno de los otros arrays. Esta página explica la firma de la función, muestra exactamente cómo funciona la comparación y describe cuándo conviene usarla en lugar de las funciones de diferencia de array más simples.

La "u" en el nombre significa suministrada por el usuario (user-supplied key comparison); "assoc" indica que las claves también se verifican (una comparación asociativa).

Firma

array_diff_uassoc(
    array $array,
    array ...$arrays,
    callable $key_compare_func
): array
  • $array — el array del que se compara origen. Sus entradas aparecen en el resultado.
  • $arrays — uno o más arrays contra los que se compara.
  • $key_compare_func — un callback fn(mixed $a, mixed $b): int que devuelve 0 cuando dos claves se consideran iguales, y un entero negativo/positivo en caso contrario (el mismo contrato <=> que usa usort). Las funciones integradas como strcasecmp encajan en esta forma.

Devuelve un nuevo array; los arrays originales no se modifican.

Cómo funciona la comparación

Esta es la parte que confunde a la gente. array_diff_uassoc() conserva una entrada de $array solo si ambas de las siguientes condiciones son verdaderas en los otros arrays:

  1. El valor no coincide (los valores se comparan con la regla predeterminada y no estricta == tras convertirlos a string — la misma regla que usa array_diff()), o
  2. La clave no coincide según tu $key_compare_func.

Dicho de otro modo: una entrada se descarta solo cuando otro array contiene el mismo valor bajo una clave que tu callback considera igual. Por lo tanto, el callback personalizado gobierna las claves; los valores siguen comparándose con la regla integrada de PHP. Ese último punto es la confusión más frecuente — el callback es solo para las claves.

Ejemplo

Comparar listas de precios con claves sin distinción entre mayúsculas y minúsculas

php— editable, runs on the server

Salida:

Array
(
    [Banana] => 0.5
    [Cherry] => 3
)

Recorriendo cada entrada de $prices:

  • Apple => 1.20strcasecmp("Apple", "apple") es 0, por lo que las claves coinciden, y el valor 1.20 también coincide con $updated["apple"]. Ambos coinciden, por lo que se descarta.
  • Banana => 0.50 — las claves coinciden (strcasecmp("Banana", "banana") === 0), pero los valores difieren (0.50 vs 0.75). Como el valor no coincide, la entrada se conserva.
  • Cherry => 3.00 — ninguna clave en $updated coincide, por lo que se conserva.

Esto muestra la regla en acción: una clave coincidente sola no es suficiente para eliminar una entrada — el valor también debe coincidir.

Funciones diff relacionadas

array_diff_uassoc() forma parte de una familia de funciones de diferencia de array. Elige la que mejor se adapte a tu estrategia de comparación:

¿Cuándo deberías usarla?

Usa array_diff_uassoc() cuando las claves importan en la comparación pero la coincidencia de claves predeterminada es demasiado estricta — por ejemplo, cuando las claves difieren solo en mayúsculas/minúsculas o formato, o cuando las claves son objetos/valores que requieren lógica personalizada para considerarse "iguales". Si solo te importan los valores, usa array_udiff(); si también necesitas un callback para los valores, usa array_udiff_uassoc().

Conclusión

array_diff_uassoc() devuelve las entradas del primer array que no tienen una coincidencia de clave/valor en los otros arrays, usando un callback que tú proporcionas para decidir cuándo dos claves son iguales. Recuerda que los valores siguen comparándose con la regla integrada de PHP — una entrada sobrevive a menos que tanto su clave como su valor coincidan en otro array.

Práctica

Práctica
¿Qué puedes decir sobre la función PHP array_diff_uassoc() basándote en la información del artículo?
¿Qué puedes decir sobre la función PHP array_diff_uassoc() basándote en la información del artículo?
Was this page helpful?