Guía Completa de la Función PHP array_uintersect_assoc
Aprende cómo PHP array_uintersect_assoc() calcula la intersección de arrays con verificación de índices y un callback de comparación de valores definido por el usuario.
array_uintersect_assoc() calcula la intersección de dos o más arrays con una verificación adicional de índices, donde los valores se comparan mediante un callback que tú proporcionas, pero las claves se comparan con la comparación integrada (flexible). Devuelve las entradas del primer array cuya clave y valor también aparecen en todos los demás arrays.
La "u" en el nombre significa comparación de valores definida por el usuario; el sufijo _assoc significa las claves también se verifican. Por lo tanto, un elemento sobrevive solo cuando ambas condiciones son verdaderas:
- su clave existe en todos los demás arrays (comparada con la comparación estándar de PHP), y
- tu callback reporta su valor como igual al elemento correspondiente en cada uno de los demás arrays.
Esto lo convierte en el pariente estricto de array_intersect(), que ignora las claves y utiliza comparación de cadenas. Usa array_uintersect_assoc() cuando la coincidencia de claves importa y necesitas una comparación de valores personalizada — por ejemplo, comparación sin distinción de mayúsculas/minúsculas, comparación de objetos o comparación de números con tolerancia.
Sintaxis
array_uintersect_assoc(array $array1, array $array2, ...$arrays, callable $value_compare_func): arrayEl callback es siempre el último argumento. Todo lo que va antes es un array a intersectar.
Parámetros
| Parámetro | Descripción |
|---|---|
$array1 | El array base. Las claves y valores de este array se conservan en el resultado. |
$array2, ... | Uno o más arrays con los que comparar $array1. |
$value_compare_func | Un callback que compara dos valores y devuelve un entero. |
Valor de retorno
Un array asociativo que contiene cada entrada de $array1 cuya clave está presente en todos los demás arrays y cuyo valor el callback considera igual en todos ellos. Las claves se conservan de $array1.
La función callback
El callback recibe dos valores y debe devolver un entero que los ordene, exactamente como las funciones de comparación utilizadas por usort():
0cuando los dos valores se consideran iguales,- un número negativo (
< 0) cuando el primero es "menor que" el segundo, - un número positivo (
> 0) cuando el primero es "mayor que" el segundo.
Dos valores se tratan como coincidencia solo cuando el callback devuelve 0. Las funciones integradas como strcasecmp() (comparación de cadenas sin distinción de mayúsculas/minúsculas) y strcmp() ya siguen este contrato, por lo que pueden pasarse directamente.
Ejemplos
Ejemplo 1: Intersección básica entre tres arrays
Salida:
Array
(
[c] => cherry
)Solo c => cherry sobrevive. apple está en $array1 y $array3 pero falta en $array2; banana está en $array1 y $array2 pero falta en $array3. Solo cherry aparece bajo la misma clave c en los tres arrays, por lo que es la única coincidencia. Nótese que la clave c se conserva de $array1.
Ejemplo 2: Coincidencia de valores sin distinción de mayúsculas/minúsculas
Salida:
Array
(
[c] => Cherry
)Los valores difieren en el uso de mayúsculas entre los arrays (Cherry vs cherry), pero como strcasecmp compara sin distinción de mayúsculas/minúsculas, el callback aún los reporta como iguales. El resultado mantiene el valor tal como aparece en $array1 (Cherry).
Ejemplo 3: Por qué importa la verificación de índices
La parte "assoc" es más fácil de ver cuando el mismo valor está bajo claves diferentes:
<?php
$array1 = array('x' => 'red', 'y' => 'green', 'z' => 'blue');
$array2 = array('x' => 'red', 'w' => 'green', 'z' => 'BLUE');
$result = array_uintersect_assoc($array1, $array2, "strcasecmp");
print_r($result);
?>Salida:
Array
(
[x] => red
[z] => blue
)red coincide porque comparte la clave x en ambos arrays. blue/BLUE coincide porque comparten la clave z y strcasecmp ignora las mayúsculas/minúsculas. Pero green es descartado: está bajo la clave y en el primer array y bajo la clave w en el segundo, por lo que las claves no coinciden. Si usaras el simple array_uintersect() aquí, green sería incluido porque las claves serían ignoradas.
Funciones relacionadas
array_intersect()— intersección por valor únicamente, usando comparación de cadenas.array_intersect_assoc()— intersección por clave y valor, usando comparación de cadenas (sin callback).array_uintersect()— intersección por valor con un callback, ignorando las claves.array_uintersect_uassoc()— como esta función, pero las claves también se comparan con un segundo callback.
Conclusión
array_uintersect_assoc() conserva las entradas del primer array cuya clave aparece en todos los demás arrays y cuyo valor el callback trata como igual en todos ellos. Úsala cuando las claves son significativas y la coincidencia de valores necesita lógica personalizada. Si también necesitas controlar cómo se comparan las claves, usa array_uintersect_uassoc(); si la comparación de cadenas para los valores es suficiente, el más simple array_intersect_assoc() cumple la función.