下面的代碼,這是非常簡單的:array_udiff()如何工作?
<?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;
});
?>
下面是輸出:
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
我不明白它是如何計算的:看12
:它比超過10倍(而,根據我的理解,它應該不超過第二個數組的元素數量),而且它與1
進行比較三次!
測試上:
PHP 5.3.9
PHP 5.3.2-1ubuntu4.14
通過不回傳任何來自回調的負值,您將混淆比較。它應該根據[array_udiff](http://php.net/array_udiff)文檔返回pos/zero/neg。如果你想弄清楚操作特性,你應該看一下PHP源代碼來獲得'官方'的字眼。 – 2012-04-22 20:16:43
我在問這個問題,因爲我想讓人們(比如我)更快地完成工作,這要歸功於stackoverflow。這意味着避免查看PHP源代碼來獲取「官方」字,並詢問這裏的某個人是否願意分享他/她的知識。 – 2012-04-22 20:21:15
雖然您可以添加評論作爲答案,並修改我的代碼以使其更「合乎邏輯」。那樣會很親切。 – 2012-04-22 20:22:01