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

发布于 2022-09-12 00:07:50 字数 783 浏览 24 评论 0

<?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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

时光暖心i 2022-09-19 00:07:50

array_diff()这个函数只是比较数组中的值,在你的例子中:$a数组最终参与比较的值是:['333',0,'2'],$b数组最终参与比较的值是:['777',101,0,1,2],这样比较你就知道结果了,当然这个函数最终返回的值是保留了键名,所以就得到:[name] => 333

请叫√我孤独 2022-09-19 00:07:50

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文