我很难理解array_udiff
的工作原理。
如果第一个参数被认为分别小于,等于或大于第二个参数,则array_udiff ($array1, $array2, data_compare_func)
[{1}}函数必须返回小于,等于或大于零的整数。 / p>
所以考虑这个功能:
data_compare_func
如果$ a等于$ b,则该方法将返回0,1否则(因为this)。
(这里没有-1返回,我觉得解释来自那里,但我可以比较一下这些值是不同的,而不是一个比另一个更大。)
有人可以在下面的代码段中解释我function please_compare($a, $b) {
return $a !== $b;
};
的行为吗?我还包括array_udiff
的输出,这实际上是我期待的行为?
array_diff
答案 0 :(得分:5)
array_udiff
依赖于比较函数返回适当的值,因为它对数组的元素进行排名。如果向比较函数添加一些输出,您将看到array_udiff
首先确定两个数组的排序顺序,并且只有在完成此操作后才会开始将array1元素与array2元素进行比较。通过从比较函数返回1,您告诉array_udiff
'a'> 'b'和'b'> 'a',类似于两个数组中的所有其他元素。在您的特定情况下,这会导致array_udiff
认为array1中的所有>在array2中所有,直到它最终将array1中的'c'与array2中的'c'进行比较,并从函数中返回0(这就是为什么它离开了'c'的原因结果)。请参阅this PHP小提琴,了解array_udiff
的内部工作情况。