关于php array_diff的一个奇怪现象,求解释。

 '333',
    'send_num' => 0,
    'make_num' => 0,
    'out_num' => 0,
    'use_type' => '2',
    'instruction_type' => '2'
];

$b = [
    'name' => '777',
    'send_num' => 101,
    'make_num' => 101,
    'out_num' => 0,
    'use_type' => 1,
    'instruction_type' => 2
];

echo '
';
print_r(array_diff($a, $b));

为何输出的是:

Array
(
    [name] => 333
)

个人感觉应该输出的是:

Array
(
    [name] => 333
    [send_num] => 0
    [make_num] => 0
    [use_type] => 2
)

结果不是,挺奇怪,问题我已经解决了,通过 array_diff_assoc 得到的是先想要的结果,但是就是没搞明白 array_diff 为啥不行。按文档里的解释说 assoc 同时也比较了键名,但是这里的键名都是一样的啊?

最佳答案

返回一个差集数组,该数组包括了所有在被比较的数组(array1)中,但是不在任何其他参数数组(array2 或 array3 等等)中的值。
因为333没出现过。所以打印的是[name] => 333
而其他的均再数组1中出现了。