PHP:array_uintersect()意外的输入参数[重复]
Posted
技术标签:
【中文标题】PHP:array_uintersect()意外的输入参数[重复]【英文标题】:PHP: array_uintersect() unexpected input params [duplicate] 【发布时间】:2019-03-06 05:26:56 【问题描述】:最近遇到了函数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 )
【问题讨论】:
不看php代码,我会说有两组结果,第一组是从$a1
和$a2
排序的(最多4 -- 1
)和第二组从哪里比较它们。但这正是链接问题中所说的,那么您的问题是什么?
【参考方案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)
中完成交集,因为之前完成的排序...
【讨论】:
以上是关于PHP:array_uintersect()意外的输入参数[重复]的主要内容,如果未能解决你的问题,请参考以下文章