误解了array_udiff的行为

ast*_*ije 4 php arrays comparison

我很难理解它是如何array_udiff运作的.

根据文件:

array_udiff ($array1, $array2, data_compare_func)
Run Code Online (Sandbox Code Playgroud)

[...] data_compare_func如果第一个参数被认为是比上述第二分别小于,等于或大于函数必须返回一个整数比小于零,等于,或更大.

所以考虑这个功能:

function please_compare($a, $b) {
  return $a !== $b;
};
Run Code Online (Sandbox Code Playgroud)

如果$ a等于$ B,该方法将返回0,否则为1(因为这个).

(这里没有-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
     )
*/
Run Code Online (Sandbox Code Playgroud)

Sag*_*ual 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小提琴,以演示内部工作array_udiff.