您的位置:首页 > 其它

array_diff_uassoc

2016-09-07 09:51 267 查看
求两个数组的差集,看手册说的:用用户提供的回调函数做索引检查。这是关键的地方,用户的回调函数只做索引的检查,也就是说,用户回调检查完索引之后,array_diff_assoc()还会对数组对应的值进行一次比较,如果值相等,就去掉,两个值不等,就留下。

举具体的例子看回调函数的作用:

第一种情形:回调函数始终return 1

$arr1 = [

1 => 'red',

2 => 'blue'

];

$arr2 = [

1 => 'red',

];

function myCompare($a,$b)

{

return 1;

}

print_r(array_diff_uassoc($arr1,$arr2,'myCompare'));

输出:Array ( [1] => red [2] => blue )

将回调函数改为return -1

输出:Array ( [1] => red [2] => blue )

也就是说,return 1 或者 -1 ,就不会对$arr1数组进行任何的处理,人为的认为$arr1出现的值在$arr2中都没有出现过。

当return 0 的时候

输出:Array ( [2] => blue )

说明,如果返回0,就会告诉内部实现这个函数的程序说,$arr2出现了和$arr1的key一样的元素,在array_diff_uassoc()内部还要进行一次值的比较,比较值相等,就从$arr1中减去这个元素,如果不相等,就保留返回。也就解释了,当myCompare() 一直返回0的时候,仍然能计算出差值:blue。

综上,array_diff_uassoc()的回调函数只是给用户做索引的自定义处理,但是array_diff_uassoc() 内部还有一次值的判断。

仅仅是个人猜测,没有阅读array_diff_uassoc()内部实现源码。

希望有所帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: