脚本宝典收集整理的这篇文章主要介绍了php – 试图理解array_uintersect行为,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
$compare = function($a,$b) use(&$ITeration_count) { echo("$a : $b\n"); $iteration_count++; return strcmp($a,$b); }; $a = array('a','b','c'); $b = array('x','y','z'); $iteration_count = 0; echo "array_udiff:" . json_encode(array_udiff($a,$b,$compare)) . "\n"; echo "iterations: $iteration_count\n\n"; $iteration_count = 0; echo "array_uintersect:" . json_encode(array_uintersect($a,$compare)) . "\n"; echo "iterations: $iteration_count\n\n";
产量
b : a c : b y : x z : y a : x a : b b : x b : c c : x array_udiff:["a","b","c"] iterations: 9 b : a c : b y : x z : y a : x // comparison started b : x // but there is no comparison to skip values c : x array_uintersect:[] iterations: 7
当在其他一个数组中找不到元素时,实现可以做两件事:
>将下一个元素与当前元素进行比较,并在它们相等时从最终结果中删除(这是diff的作用)
>将下一个元素与其他数组的最后一个被检查元素进行比较,并将其从最终结果中删除,直到它变大(或者到达数组的末尾).
在PHP的情况下,选择后者.这有一点点优势,因为它可以跳过大于当前元素但小于其他数组的最后一个被检查元素的值.例如:
$a = ['a.a0','a.a1','b.a2','c.a3']; $b = ['a.c0','d.c1']; function cmp_val($a,$b) { echo "$a <=> $b\n"; return strcmp($a[0],$b[0]); } PRint_r(array_uintersect($a,'cmp_val'));
输出:
... -- intersect starts a.a0 <=> a.c0 a.a0 <=> a.a1 <-- match a.a1 <=> b.a2 b.a2 <=> d.c1 <-- no match c.a3 <=> d.c1
如您所见,它使用在第一个数组中进行比较的策略,如果在所有其他数组中出现值,就像diff一样;如果任何其他数组中不存在该值,则使用另一种策略.
以上是脚本宝典为你收集整理的php – 试图理解array_uintersect行为全部内容,希望文章能够帮你解决php – 试图理解array_uintersect行为所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。