gpt4 book ai didi

php - 误解 array_udiff 的行为

转载 作者:可可西里 更新时间:2023-10-31 22:55:44 24 4
gpt4 key购买 nike

我无法理解 array_udiff 的工作原理。

根据documentation :

array_udiff ($array1, $array2, data_compare_func)

[...] data_compare_func function must return an integer less than, equal to, or greater than zero if the first argument is considered to be respectively less than, equal to, or greater than the second.

所以考虑这个功能:

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
)
*/

最佳答案

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

关于php - 误解 array_udiff 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18092562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com