最近遇到函数array_uintersect。我只是想知道是否有人能解释当我将意外输入传递给回调函数时如何传递输入参数,我已经经历了This的答案,但是找不到我的问题的答案。任何帮助或线索都将不胜感激,只需尝试了解回调功能的工作即可。
注意:功能的结果完全正确。
代码:
function myfunction($a,$b) {
echo "$a -- $b \n";
if ($a===$b) {
return 0;
}
return ($a>$b)?1:-1;
}
$a1 = array(1,2,3);
$a2 = array(4,5,1);
$result = array_uintersect($a1,$a2,"myfunction");
print_r($result);
当我们将两个数组都作为参数传递时,将输入期望为每个数组中的值,结果如下所示。
结果:
1 -- 2
2 -- 3
4 -- 5
5 -- 1
4 -- 1
1 -- 1
1 -- 2
2 -- 4
3 -- 4
Array ( [0] => 1 )
答案 0 :(得分:1)
正如@Nick在他的评论(以及您共享的链接)中提到的那样,声称array_uintersect
在检查相交之前对数组进行了排序。
这将是以下内容的一部分:
1 -- 2 // sort first array
2 -- 3 // sort first array
4 -- 5 // sort second array
5 -- 1 // sort second array
4 -- 1 // sort second array
现在两个数组都是:$a1 = [1,2,3] and $a2 = [1,4,5]
。
现在交点部分:
1 -- 1 // checking index 0 in both array
1 -- 2 // checking $a2[0] and $a1[1] -> 2 is bigger so let continue with him
2 -- 4 // checking $a1[1] and $a2[1] -> as we already check $a2[0] -> 4 is bigger so continue with him
3 -- 4 // checking $a1[2] and $a2[1] -> 4 is bigger but not $a1[3] so done checking
请注意,由于之前的排序方式,交集可以用O(n)
完成。