Como o array_udiff () funciona?
Aqui está o código, é muito simples:
<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>
Aqui está a saída:
<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>
Eu não entendo como isso é computado: veja12
: é comparado mais de 10 vezes (ao passo que, pelo que entendi, deve ser comparado não mais do que o número de elementos da segunda matriz), e além disso é comparado três vezes com1
!
Testado em:
<code>PHP 5.3.9 PHP 5.3.2-1ubuntu4.14 </code>