我想知道为什么array_uintersect_assoc的比较函数"如果第一个参数被认为分别小于,等于或大于,则必须返回小于,等于或大于零的整数比第二个" (http://php.net/manual/en/function.array-uintersect-assoc.php)。当我比较两个数组时,我只需要布尔值:元素要么匹配要么不要。
这种行为的实际原因是什么?
答案 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"));
你可以看到这里使用的比较函数返回一个布尔值,但结果完全相同。
底线:现有的实现更灵活,同时允许使用返回布尔结果的比较函数。