You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 06:45:02