¿Cómo funciona array_udiff ()?

Aquí está el código, es muy simple:

<code><?php
$tab = array (
    (object)array( 'id' => 1,),
    (object)array( 'id' => 4,),
    (object)array( 'id' => 12,),
    (object)array( 'id' => 22,),
    (object)array( 'id' => 25,),
);

$tab_json = array (
    (object)array( 'id' => 1,),
    (object)array( 'id' => 4,),
    (object)array( 'id' => 12,),
    (object)array( 'id' => 22,),
    (object)array( 'id' => 25,),
    (object)array( 'id' => 2,),
);
$difference = array_udiff($tab_json, $tab, function($a, $b) {
    echo $a->id." <-> ".$b->id."\n";
    return (count(array_diff_assoc(get_object_vars($a), get_object_vars($b))))>0;
});
?>
</code>

Aquí está la salida:

<code>12 <-> 4
12 <-> 1
12 <-> 22
12 <-> 25
2 <-> 12
4 <-> 25
4 <-> 1
22 <-> 4
25 <-> 1
12 <-> 4
12 <-> 1
12 <-> 22
25 <-> 12
4 <-> 22
1 <-> 4
1 <-> 22
1 <-> 4
1 <-> 1
1 <-> 25
25 <-> 4
25 <-> 1
25 <-> 12
25 <-> 25
25 <-> 4
4 <-> 1
4 <-> 12
4 <-> 25
4 <-> 22
22 <-> 1
22 <-> 12
22 <-> 25
22 <-> 12
12 <-> 1
12 <-> 12
12 <-> 2
2 <-> 12
2 <-> 25
</code>

No entiendo cómo se computa: mira12: se compara más de 10 veces (mientras que, por lo que entiendo, no se debe comparar más que el número de elementos de la segunda matriz), y además se compara tres veces con1!

Probado en:

<code>PHP 5.3.9
PHP 5.3.2-1ubuntu4.14
</code>

Respuestas a la pregunta(1)

Su respuesta a la pregunta