Documentación offline PHP master

array_udiff_uassoc

master Ver versión oficial en línea Licencia CC-BY-3.0Descargado el 2026-08-02

En esta página

array_udiff_uassoc

Calcula la diferencia entre dos arrays asociativos, compara los datos y los índices con una función de retorno

Descripción#

array_udiff_uassoc(array $array, array ...$arrays, callable $value_compare_func, callable $key_compare_func): array
```php

Calcula la diferencia entre dos arrays asociativos, compara los datos y los índices con una función de retorno.

Se debe tener en cuenta que las claves se utilizan en las comparaciones, a diferencia de `array_diff` y `array_udiff`.

## Parámetros

`array`  
El primer array.

`arrays`  
Arrays a comparar

`value_compare_func`  
La función de comparación debe retornar un entero menor que, igual a, o mayor que 0 si el primer argumento es considerado, respectivamente, menor que, igual a, o mayor que el segundo.

```php
callback(mixed $a, mixed $b): int

[!CAUTION] Devolver valores no enteros (como float) desde la función de comparación resultará en una conversión interna del valor de retorno de la retrollamada a int. Así, valores como 0.99 y 0.1 serán convertidos ambos al valor entero 0, por lo que se compararán como iguales.

[!CAUTION] La función de callback de ordenación debe tratar cualquier valor de cualquier array en cualquier orden, independientemente del orden en el que fueron proporcionados inicialmente. Esto se debe a que cada array individual es ordenado primero antes de ser comparado con otros arrays. Por ejemplo:

``` 1]]; // $item1 y $item2 pueden ser cualquiera de los siguientes valores : "cadena", 1 o ["value" => 1] $compareFunc = static function ($item1, $item2) { $value1 = is_string($item1) ? strlen($item1) : (is_array($item1) ? $item1["value"] : $item1); $value2 = is_string($item2) ? strlen($item2) : (is_array($item2) ? $item2["value"] : $item2); return $value1 <=> $value2; }; ?>

```

key_compare_func
La comparación de las claves (índices) se realiza mediante la función de retorno key_compare_func. Este comportamiento difiere del de array_udiff_assoc, ya que esta última utiliza una función interna para comparar los índices.

Valores devueltos#

Devuelve un array que contiene todas las claves del array array que no están presentes en ningún otro argumento.

Ejemplos#

Ejemplo con array_udiff_uassoc

<?php
class cr {
    private $priv_member;
    function __construct($val)
    {
        $this->priv_member = $val;
    }

    static function comp_func_cr($a, $b)
    {
        if ($a->priv_member === $b->priv_member) return 0;
        return ($a->priv_member > $b->priv_member)? 1:-1;
    }

    static function comp_func_key($a, $b)
    {
        if ($a === $b) return 0;
        return ($a > $b)? 1:-1;
    }
}
$a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),);
$b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3), 1=> new cr(4), 2 => new cr(-15),);

$result = array_udiff_uassoc($a, $b, array("cr", "comp_func_cr"), array("cr", "comp_func_key"));
print_r($result);
?>

El ejemplo anterior mostrará:

Array
(
    [0.1] => cr Object
        (
            [priv_member:cr:private] => 9
        )

    [0.5] => cr Object
        (
            [priv_member:cr:private] => 12
        )

    [0] => cr Object
        (
            [priv_member:cr:private] => 23
        )
)

En nuestro ejemplo, se observa que el par "1" => new cr(4) está presente en ambos arrays y, por lo tanto, ausente del array resultante. Se debe tener en cuenta que se deben proporcionar dos funciones de retorno.

Notas#

[!NOTE] Se debe tener en cuenta que esta función solo verifica una dimensión de un array multidimensional. Por supuesto, se puede probar una dimensión particular utilizando, por ejemplo, array_udiff_uassoc($array1[0], $array2[0], "data_compare_func", "key_compare_func");.

Véase también#

array_diff, array_diff_assoc, array_udiff, array_udiff_assoc, array_intersect, array_intersect_assoc, array_uintersect, array_uintersect_assoc, array_uintersect_uassoc