W3docs

Guía completa de la función array_uintersect() de PHP

Aprende cómo array_uintersect() de PHP compara arrays con un callback personalizado para devolver valores comunes. Sintaxis, ejemplos y casos de uso.

La función array_uintersect() compara los valores de dos o más arrays y devuelve los valores del primer array que también están presentes en todos los demás. Lo que la diferencia de array_intersect() es el prefijo u: proporcionas la lógica de comparación mediante un callback, por lo que controlas exactamente cuándo dos valores se consideran iguales.

Esta página cubre la sintaxis, cómo funciona el callback de comparación, ejemplos ejecutables y cuándo usar esta función en lugar de sus alternativas más simples.

Sintaxis

array_uintersect(
    array $array1,
    array $array2,
    array ...$arrays,
    callable $value_compare_func
): array
ParámetroDescripción
$array1El array base. Sus claves y valores se conservan en el resultado.
$array2, ...$arraysUno o más arrays con los que comparar. Un valor sobrevive solo si aparece en todos ellos.
$value_compare_funcUn callback que decide cuándo dos valores son iguales. Siempre es el último argumento.

La función devuelve un nuevo array con los valores de $array1 que se encuentran en todos los demás arrays, conservando las claves originales de $array1.

Cómo funciona el callback de comparación

El callback recibe dos valores y debe devolver un entero:

  • un valor menor que 0 si el primer argumento es "menor que" el segundo,
  • 0 si los dos valores se consideran iguales,
  • un valor mayor que 0 si el primero es "mayor que" el segundo.

Solo un valor de retorno de 0 cuenta como coincidencia. Este es el mismo contrato de tres vías utilizado por las funciones de ordenación como usort(), razón por la cual la función integrada strcmp() resulta un callback conveniente para strings.

array_uintersect() no realiza conversión de tipos por sí misma — toda decisión de igualdad pasa por tu callback. Eso significa que puedes hacer la comparación tan flexible o estricta como necesites (sin distinción de mayúsculas, con tipos estrictos, con conciencia de object, etc.).

Un callback simple para string tiene este aspecto:

function compare_strings($string1, $string2) {
    return strcmp($string1, $string2);
}

Ejemplo básico

Aquí intersectamos tres arrays de nombres de frutas usando el callback anterior:

<?php

function compare_strings($string1, $string2) {
    return strcmp($string1, $string2);
}

$array1 = array("apple", "orange", "banana");
$array2 = array("orange", "banana", "kiwi");
$array3 = array("banana", "kiwi", "grape");

$result = array_uintersect($array1, $array2, $array3, "compare_strings");

print_r($result);

?>

Salida:

Array
(
    [2] => banana
)

Solo "banana" aparece en los tres arrays. Observa que la clave es 2 — ese es su índice original en $array1, conservado en el resultado. "orange" se descarta porque no está presente en $array3.

Coincidencia sin distinción de mayúsculas

Dado que el callback controla toda la lógica de comparación, sustituir por strcasecmp() hace que la intersección ignore las mayúsculas y minúsculas:

<?php

$a = ["Red", "GREEN", "Blue"];
$b = ["red", "green", "yellow"];

$result = array_uintersect($a, $b, "strcasecmp");

print_r($result);

?>

Salida:

Array
(
    [0] => Red
    [1] => GREEN
)

"Red" y "GREEN" se conservan porque strcasecmp() los trata como iguales a "red" y "green". Los valores devueltos son los del primer array, por lo que se mantiene el formato de mayúsculas original.

Cuándo usar array_uintersect()

Recurre a esta función cuando:

  • Necesitas la intersección de valores de array (no de claves), y
  • Una simple verificación de igualdad no es suficiente — los valores son objects, tipos mixtos o necesitan una comparación difusa o normalizada.

Si solo necesitas comparar valores con la comparación flexible predeterminada de PHP, array_intersect() es más sencilla. Si las claves también importan, consulta array_uintersect_assoc(), y para la diferencia (en lugar de intersección) con un callback, consulta array_udiff().

Principales ventajas:

  1. Encuentra elementos comunes en varios arrays con una sola llamada, sin bucles manuales.
  2. Las claves originales del primer array se conservan para facilitar el mapeo de datos.
  3. La lógica de comparación personalizada maneja tipos de datos complejos y reglas de coincidencia específicas.

Conclusión

array_uintersect() es la herramienta adecuada cuando necesitas los valores comunes de varios arrays pero la comparación integrada de PHP no se ajusta a la forma en que defines la igualdad. Define un callback que devuelva 0 para valores iguales, pásalo como último argumento, y la función devuelve los valores coincidentes del primer array con sus claves intactas.

Práctica

Práctica
¿Cuál es el papel de la función array_uintersect() en PHP?
¿Cuál es el papel de la función array_uintersect() en PHP?
Was this page helpful?