array_diff_uassoc

10 篇文章 0 订阅
求两个数组的差集,看手册说的:用用户提供的回调函数做索引检查。这是关键的地方,用户的回调函数只做索引的检查,也就是说,用户回调检查完索引之后,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()内部实现源码。
希望有所帮助。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值