gpt4 book ai didi

PHP 数组比较 : why must the callback function for array_uintersect return -1, 0,还是 1?

转载 作者:行者123 更新时间:2023-12-04 22:30:24 27 4
gpt4 key购买 nike

array_uintersect 的文档评论中提到了这一点回调函数必须返回 -1 ($a < $b)、0 ($a === $b) 或 1 ($a > $b)

回调函数的目的是比较$a 和$b 以确定是否将它们包含在交集中,或者将它们排除在外。那么为什么要返回 -1、0 或 1 而不是简单的 bool 值呢?

这是一些(工作)example code关于我想要实现的目标,我只是很好奇为什么会这样。

最佳答案

重要的是要提到 array_uintersect()在数组输入上的操作甚至更多 比人们希望的还要奇怪。人们期望调用 array_uintersect($firstArray, $secondArray, function ($a, $b) {})将导致来自 $firstArray 的每个条目和来自 $secondArray 的每个条目每个比较一次(在找到第一个交集后对条目停止比较的优化)。任何理智的人都会期望 $firstArray 的每个条目将落在回调的 $a 中参数和 $secondArray 的每个条目将降落在其 $b争论。

不是这种情况!信不信由你,php 对您的回调的第一次调用有 $a$b 均设置为来自 $firstArray 的条目 !您正在调用一个以数组的交集命名的函数,但该函数还会比较各个数组中的条目,而不是简单地在数组之间进行比较。这真的让人头脑 NumPy 。

因此,array_uintersect 不是以下 block 的替代品。用户要当心。

$intersection = [];
foreach ($firstArray as $a) {
foreach ($secondArray as $b) {
if (user_compare_function($a, $b) === 0) {
$intersection[] = $a;
break;
}
}
}

关于PHP 数组比较 : why must the callback function for array_uintersect return -1, 0,还是 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13318520/

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