ast*_*ije 4 php arrays comparison
我很难理解它是如何array_udiff运作的.
根据文件:
Run Code Online (Sandbox Code Playgroud)array_udiff ($array1, $array2, data_compare_func)[...]
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)
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.