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()内部实现源码。
希望有所帮助。
举具体的例子看回调函数的作用:
第一种情形:回调函数始终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()内部实现源码。
希望有所帮助。
相关文章推荐
- php array_diff_ukey() array_diff_uassoc() 理解
- 第43篇一对多按原型图做(一)及 array_diff_key() 及array_diff_uassoc() 周日
- array_diff_uassoc和array_udiff_assoc
- php中的常用数组函数(一)(比较多个数组的差集的函数们 array_diff_assoc() array_diff() array_diff_key() array_diff_ukey() array_diff_uassoc())
- 算法(1)K-diff Pairs in an Array
- FCC-----------Diff Two Array
- PHP - Manual手册 - 函数参考 - Array 数组函数 - array_diff计算数组的差集
- php array_diff()
- php array_intersect() 和 array_diff() 函数
- LeetCode #532 K-diff Pairs in an Array
- codewars算法题-Array.diff
- 第73篇一对多之两个学生相互刷新解决(二)重写最后一张白板的刷新及array_udiff_assoc及array_udiff_uassoc
- K-diff Pairs in an Array
- [Leetcode] 532. K-diff Pairs in an Array 解题报告
- LeetCode 532. K-diff Pairs in an Array
- PHP array_diff_uassoc
- 532. K-diff Pairs in an Array
- [leetcode]: 532. K-diff Pairs in an Array
- leetcode[K-diff Pairs in an Array]//待整理多种解法
- LeetCode 532. K-diff Pairs in an Array