为什么array_uintersect_assoc需要比较函数和非布尔返回值?

时间:2017-04-05 11:03:39

标签: php arrays comparison intersection

我想知道为什么array_uintersect_assoc的比较函数"如果第一个参数被认为分别小于,等于或大于,则必须返回小于,等于或大于零的整数比第二个" (http://php.net/manual/en/function.array-uintersect-assoc.php)。当我比较两个数组时,我只需要布尔值:元素要么匹配要么不要。

这种行为的实际原因是什么?

1 个答案:

答案 0 :(得分:0)

该功能以这种方式实现,允许使用" classic"使用这种返回策略的比较函数。由于显而易见的原因,这样的函数通常需要能够表达三个情况,这对于布尔返回值是不可能的。

但是,您也可以使用执行返回布尔结果的比较函数,因为php作为弱类型语言会自动为您转换。看一下这个示例,它是函数文档中给出的稍微修改过的版本:

<?php
function mystrcasecmp($a, $b) {
    return strcasecmp($a, $b) ? true : false;
}

$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "GREEN", "B" => "brown", "yellow", "red");

print_r(array_uintersect_assoc($array1, $array2, "mystrcasecmp"));

你可以看到这里使用的比较函数返回一个布尔值,但结果完全相同。

底线:现有的实现更灵活,同时允许使用返回布尔结果的比较函数。