4

我很难理解它是如何array_udiff工作的。

根据文档

array_udiff ($array1, $array2, data_compare_func)

[...]data_compare_func如果第一个参数分别被认为小于、等于或大于第二个参数,则函数必须返回一个小于、等于或大于零的整数。

所以考虑这个功能:

function please_compare($a, $b) {
  return $a !== $b;
};

如果 $a 等于 $b,该方法将返回 0,否则返回 1(因为this)。

(这里没有返回-1,我觉得解释来自那里,但我可以比较值不同,而不是一个大于另一个。)

array_udiff有人可以在以下代码段中解释我的行为吗?我还包括了 的输出array_diff,这实际上是我所期望的行为?

$array1 = array('a', 'b', 'c', 'd');
$array2 = array('a', 'b', 'c');

print_r(array_udiff($array1, $array2, 'please_compare'));
/* Returns:
     Array
     (
       [0] => a
       [1] => b
       [3] => d
     )
*/

print_r(array_diff($array1, $array2));
/* Returns:
     Array
     (
       [3] => d
     )
*/
4

1 回答 1

5

array_udiff依赖于返回适当值的比较函数,因为它对数组的元素进行排名。如果向比较函数添加一些输出,您将看到array_udiff首先确定两个数组的排序顺序,只有在完成此操作后,它才会开始比较 array1 元素和 array2 元素。通过从比较函数返回 1,您可以告诉array_udiff'a' > 'b''b' > 'a',对于两个数组中的所有其他元素也是如此。在您的特定情况下,这会导致array_udiff认为array1中的所有内容> array2中的所有内容,直到最终碰巧将array1中的'c'与array2中的'c'进行比较,并从您的函数中返回 0(这就是为什么它在结果中留下了 'c')。看这个PHP fiddle 用于演示array_udiff.

于 2013-08-07T02:02:31.350 回答