在现代 php 环境中运行脚本时,警告应该表明您使用了错误的工具来完成这项工作。
错误代码:(演示)
$array1 = [[12 => 'new q sets'], [11 => 'common set']];
$array2 = [[11 => 'common set']];
var_export(array_diff_assoc($array1, $array2));
错误输出:
Warning: Array to string conversion in /in/jIUcq on line 6
Warning: Array to string conversion in /in/jIUcq on line 6
array (
1 =>
array (
11 => 'common set',
),
)
您实际上并不想比较第一级索引,因为相关/匹配的行可能具有不同的第一级索引。
相反,您应该使用array_udiff()
来比较关联行(并忽略第一级键)。使用“宇宙飞船运算符”可以进行 3 路比较——正如array_udiff()
回调所期望的那样——无需迭代函数调用。在下面的代码段中,$a
表示$b
数据行。
正确的代码:(演示)
var_export(
array_udiff($array1, $array2, fn($a, $b) => $a <=> $b)
);
正确的输出:
array (
0 =>
array (
12 => 'new q sets',
),
)