php arrayudiff,php array_udiff工作原理
php的array_udiff的工作原理實在搞不懂,尤其是回調函數,
$arr1 = array('m1'=>1, 'm2'=>5, 'm3'=>3);
$arr2 = array('n2'=>4, 'n2'=>5, 'n3'=>6);
var_dump(array_udiff($arr1, $arr2, function($a, $b){
print_r($a.'~~~~'.$b.'
');
if($a>$b)
return 1;
else
return 0;
})
);
每次的回調函數的參數是什么, 我把它打印出來,可并不像期望的那樣,$arr1的每個元素值直接與$arr2的每個元素值相比較,而是
5~~~~1
3~~~~5
1~~~~3
6~~~~5
1~~~~5
1~~~~3
3~~~~5
回調函數返回的結果又是做什么用的,求解
最后吐槽一下,網上查的結果全他么都是從www3school和php.net復制下來的,實在不能忍,操
回復內容:
php的array_udiff的工作原理實在搞不懂,尤其是回調函數,
$arr1 = array('m1'=>1, 'm2'=>5, 'm3'=>3);
$arr2 = array('n2'=>4, 'n2'=>5, 'n3'=>6);
var_dump(array_udiff($arr1, $arr2, function($a, $b){
print_r($a.'~~~~'.$b.'
');
if($a>$b)
return 1;
else
return 0;
})
);
每次的回調函數的參數是什么, 我把它打印出來,可并不像期望的那樣,$arr1的每個元素值直接與$arr2的每個元素值相比較,而是
5~~~~1
3~~~~5
1~~~~3
6~~~~5
1~~~~5
1~~~~3
3~~~~5
回調函數返回的結果又是做什么用的,求解
最后吐槽一下,網上查的結果全他么都是從www3school和php.net復制下來的,實在不能忍,操
先不要管它內部是怎么實現比較算法的,我們在callback里 需要實現的是 回調函數的第一個參數小于,等于或大于第二個參數時,該比較函數必須相應地返回一個小于,等于或大于 0 的整數。
樓主的例子更改為如下時,便可實現正常的比較功能:
$arr1 = array('m1'=>1, 'm2'=>5, 'm3'=>3);
$arr2 = array('n2'=>4, 'n2'=>5, 'n3'=>6);
var_dump(array_udiff($arr1, $arr2, function($a, $b){
print_r($a.'~~~~'.$b.'
');
if($a>$b){
return 1;
} else if($a == $b) {
return 0;
} else if($a < $b) {
return -1;
}
}));
回調函數只要實現如何判斷傳進來的兩個值是相等還是大于小于的關系即可。這兩個值都是數組的元素。但是不要誤會 第一個參數是第一個數組的值,第二個參數是第二個數組的值。
call_back在這個函數中有2個作用,
* 排序 將array_udiff中的每個參數排序,并返回hash之后的數組
* 過濾 將第一個數組與其他數組比較,過濾出要返回的值
P.S. 我確定這個過程是正確的。參考PHP: array_udiff()
在你的例子中
$arr1 = array('m1'=>1, 'm2'=>5, 'm3'=>3);
$arr2 = array('n2'=>4, 'n2'=>5, 'n3'=>6); //n2=>4應該是n1吧?
輸出中的前4項
5~~~~1
3~~~~5
1~~~~3
6~~~~5
就是在做排序
拍完序之后,會把第一數組中的每一個項去其他數組中檢查,若不存在則將該項放入返回數組中。
但是從輸出的內容上看有點詭異,我也不明白!囧。
array_diff本身是計算數組的差集。貌似不支持回調函數吧?
http://cn2.php.net/manual/zh/function.array-diff.php
相關標簽:php
本文原創發布php中文網,轉載請注明出處,感謝您的尊重!
總結
以上是生活随笔為你收集整理的php arrayudiff,php array_udiff工作原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 不等于 的函数吗,PHP不常见的
- 下一篇: 孤灯php加密,PHP实现观察者模式