array_diff_uassoc是否为可变参数函数?文档签名存疑求解
关于
array_diff_uassoc函数签名与调用的问题 文档签名的说明
PHP官方文档里的array_diff_uassoc签名是一种示意性写法,并非严格的PHP语法定义。文档中的...$arrays是用来表示「可传入任意多个额外的对比数组」,而非PHP语法中要求必须放在最后的可变参数语法。实际这个函数的参数逻辑是:
- 第一个参数:基准数组
- 中间任意数量的参数:需要对比的其他数组
- 最后一个参数:键名比较的回调函数
所以文档本身没有错误,只是用了简化的标记方式来展示可变数量的数组参数。
正确调用方式
要传入2个以上的对比数组,直接把所有对比数组依次放在基准数组后面,最后放回调函数即可。举个实际例子:
// 定义键名对比回调 function compare_keys($key1, $key2) { return $key1 <=> $key2; // 太空船运算符,PHP7+支持 } $base_arr = ['a' => 'apple', 'b' => 'banana', 'c' => 'cherry']; $arr1 = ['a' => 'apple', 'b' => 'berry']; $arr2 = ['a' => 'apple', 'c' => 'cherry']; $arr3 = ['b' => 'banana', 'c' => 'coconut']; // 对比基准数组和3个其他数组 $result = array_diff_uassoc($base_arr, $arr1, $arr2, $arr3, 'compare_keys'); print_r($result);
如果想用参数解包(比如对比数组存在一个数组里),可以这样写:
$compare_arrs = [$arr1, $arr2, $arr3]; $result = array_diff_uassoc($base_arr, ...$compare_arrs, 'compare_keys');
这里的...是PHP的参数展开语法,把$compare_arrs里的元素逐个作为中间参数传入,最后依然保留回调函数作为最后一个参数,完全符合函数的参数要求。
关于你之前的报错
你提到用参数解包时报错,大概率是因为把回调函数放在了展开参数的前面,或者回调函数本身的逻辑不符合要求(比如没有返回正确的整数:相等返回0,大于返回正整数,小于返回负整数)。检查回调函数的返回值是否符合规范,再确认参数顺序即可解决。
内容的提问来源于stack exchange,提问作者Shurlan
相关产品推荐
相关产品推荐

