The example #1 can be modified (PHP 7 or higher) by using Spaceship operator (<=>):
<?php
//…
static function comp_func_cr($a, $b)
{
return $a->priv_member <=> $b->priv_member;
}
//…
?>
(PHP 5, PHP 7, PHP 8)
array_udiff_assoc — Computa la diferencia entre arrays con una comprobación de indices adicional, compara la información mediante una función de llamada de retorno
$array1
,$array2
,$...
= ?,$value_compare_func
Computa la diferencia entre arrays con una comprobación de indices adicional, compara la información mediante una función de llamada de retorno.
Nota: Por favor, observe que esta función sólo comprueba una dimensión de un array n-dimensional. Por supuesto, se pueden comprobar dimensiones más profundas usando, por ejemplo,
array_udiff_assoc($array1[0], $array2[0], "alguna_func_comparacion");
.
array1
El primer array.
array2
El segundo array.
value_compare_func
La función de comparación debe devolver un entero menor, igual o mayor que cero si el primer argumento se considera que sea respectivamente menor, igual o mayor que el segundo. Observe que antes de PHP 7.0.0 este entero debía estar en el rango de -2147483648 a 2147483647.
array_udiff_assoc() devuelve un array
que contiene todos los valores de array1
que no están presentes en ninguno de los demás argumentos.
Observe que las claves se usan en la comparación a diferencia de
array_diff() y array_udiff().
La comparación de la información de los arrays' se lleva a cabo usando una llamada de retorno
proporcionada por el usuario. En este aspecto, el comportamiento es opuesto al de
array_diff_assoc(), que usa una función interna para la
comparación.
Ejemplo #1 Ejemplo de array_udiff_assoc()
<?php
class cr {
private $miembro_privado;
function cr($val)
{
$this->miembro_privado = $val;
}
static function comp_func_cr($a, $b)
{
if ($a->miembro_privado === $b->miembro_privado) return 0;
return ($a->miembro_privado > $b->miembro_privado)? 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),);
$resultado = array_udiff_assoc($a, $b, array("cr", "comp_func_cr"));
print_r($resultado);
?>
El resultado del ejemplo sería:
Array ( [0.1] => cr Object ( [miembro_privado:private] => 9 ) [0.5] => cr Object ( [miembro_privado:private] => 12 ) [0] => cr Object ( [miembro_privado:private] => 23 ) )
En el ejemplo de arriba se ve que el par "1" => new cr(4)
está presente en ambos arrays, y que, de esta manera, no está en la salida de la
función.
The example #1 can be modified (PHP 7 or higher) by using Spaceship operator (<=>):
<?php
//…
static function comp_func_cr($a, $b)
{
return $a->priv_member <=> $b->priv_member;
}
//…
?>
Difference between array_udiff_assoc() and array_diff_assoc()
- array_udiff_assoc(): Compares the DATA with the user supplied callback function
- array_diff_assoc(): Compares the INDEX with the user supplied callback function