Jak działa array_udiff ()?
Oto kod, to bardzo proste:
<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>
Oto wyjście:
<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>
Nie rozumiem, jak to jest obliczone: spójrz na12
: porównuje się go ponad 10 razy (podczas gdy z tego, co rozumiem, należy porównać nie więcej niż liczbę elementów drugiej tablicy), a ponadto jest on porównywany trzy razy z1
!
Testowane na:
<code>PHP 5.3.9 PHP 5.3.2-1ubuntu4.14 </code>