¿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>