误解了array_udiff的行为

时间:2013-08-07 00:09:05

标签: php arrays comparison

我很难理解array_udiff的工作原理。

根据documentation

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

1 个答案:

答案 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的内部工作情况。