Entendiendo la función array_intersect_uassoc en PHP
Aprende cómo usar array_intersect_uassoc() en PHP para calcular la intersección de arrays con una función de comparación de claves personalizada.
array_intersect_uassoc() calcula la intersección de dos o más arrays — devuelve las entradas del primer array cuyo valor Y clave también aparecen en todos los demás arrays. Lo que hace especial a esta variante es la u en su nombre: tú proporcionas un callback definido por el usuario que decide cuándo dos claves se consideran iguales. Los valores siguen comparándose con la comparación integrada de PHP (flexible, basada en cadenas).
Esta página explica cómo funciona la función, recorre un ejemplo verificado y muestra cuándo usarla en lugar de las otras variantes de array_intersect_*.
Sintaxis
array_intersect_uassoc(
array $array,
array ...$arrays,
callable $key_compare_func
): array$array— el array que se compara; sus entradas aparecen en el resultado....$arrays— uno o más arrays para comparar contra el primero.$key_compare_func— un callback que compara dos claves. Debe devolver un entero menor que, igual a, o mayor que0cuando la primera clave se considera menor que, igual a, o mayor que la segunda (el mismo contrato que un comparador deusort).
La función devuelve un nuevo array con las entradas coincidentes de $array, preservando sus claves originales.
Cómo funciona el callback de claves
A diferencia de array_intersect_assoc(), que compara claves con ===, esta función delega la comparación de claves a tu callback. Eso te permite implementar reglas de coincidencia que PHP no ofrece de forma nativa — claves sin distinción de mayúsculas y minúsculas, claves recortadas u ordenación según la configuración regional.
Ten en cuenta la responsabilidad dividida: las claves son comparadas por tu callback, pero los valores siguen siendo comparados por la propia función (de forma flexible, como cadenas). Si también necesitas una comparación de valores personalizada, usa array_uintersect_uassoc().
Ejemplo
<?php
// The callback receives two keys and must return an int:
// 0 = equal, -1 = first is smaller, 1 = first is larger.
function compareKeys($key1, $key2) {
if ($key1 === $key2) {
return 0;
}
return ($key1 > $key2) ? 1 : -1;
}
$array1 = ["a" => "green", "b" => "brown", "c" => "blue", "red"];
$array2 = ["a" => "green", "yellow", "red"];
$result = array_intersect_uassoc($array1, $array2, "compareKeys");
print_r($result);
?>Salida:
Array
(
[a] => green
)Solo "a" => "green" sobrevive, porque es la única entrada cuya clave y valor aparecen en $array2:
"b" => "brown"y"c" => "blue"— las claves no existen en$array2.0 => "red"en$array1— el valor"red"existe en$array2, pero en la clave1, por lo que las claves (0frente a1) no coinciden.
Cuándo usarla
Usa array_intersect_uassoc() cuando necesites una intersección que tenga en cuenta las claves y estas requieran lógica de coincidencia personalizada. Un caso común es la coincidencia de encabezados o columnas sin distinción de mayúsculas y minúsculas:
<?php
function ci_keys($k1, $k2) {
return strcasecmp((string) $k1, (string) $k2);
}
$config = ["Host" => "localhost", "Port" => 8080];
$expected = ["host" => "localhost", "PORT" => 8080];
print_r(array_intersect_uassoc($config, $expected, "ci_keys"));
?>Esto mantiene Host => localhost y Port => 8080 porque el callback trata Host/host y Port/PORT como la misma clave, mientras que los valores siguen coincidiendo.
Funciones relacionadas
| Función | Comparación de claves | Comparación de valores |
|---|---|---|
array_intersect() | ignorada | integrada |
array_intersect_assoc() | === | integrada |
array_intersect_key() | === (solo claves) | ignorada |
array_intersect_ukey() | callback (solo claves) | ignorada |
array_intersect_uassoc() | callback | integrada |
array_uintersect_uassoc() | callback | callback |
Conclusión
array_intersect_uassoc() devuelve las entradas del primer array cuyo valor y clave aparecen en todos los demás arrays, permitiéndote controlar la coincidencia de claves mediante un callback definido por el usuario. Úsala cuando una intersección asociativa necesite reglas de claves flexibles — como claves sin distinción de mayúsculas y minúsculas o claves recortadas — y recuerda que los valores siguen comparándose con la comparación integrada de PHP.