关于php array_diff的一个奇怪现象,求解释。
<?php
$a = [
'name' => '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 '<pre>';
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 同时也比较了键名,但是这里的键名都是一样的啊?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
array_diff()
这个函数只是比较数组中的值,在你的例子中:$a
数组最终参与比较的值是:['333',0,'2']
,$b
数组最终参与比较的值是:['777',101,0,1,2]
,这样比较你就知道结果了,当然这个函数最终返回的值是保留了键名,所以就得到:[name] => 333
返回一个差集数组,该数组包括了所有在被比较的数组(array1)中,但是不在任何其他参数数组(array2 或 array3 等等)中的值。
因为333没出现过。所以打印的是[name] => 333
而其他的均再数组1中出现了。