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()意外的输入参数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

array_uintersect 将多维数组的每一行中的特定元素与字符串的平面数组进行比较

php 学习笔记--数组篇

PHP速记三元运算符“?:”解析错误意外“:”

php字符串比较意外类型杂耍

意外的连接重置:PHP 或 Apache 问题?

PHP:注册页面上出现语法错误意外“require_once”