array_diff()和array_diff_assoc()

最近在开发项目的时候有需要数据对比,然后就用到了array_diff函数,用了以后发现不是自己想要的结果。先看下面的代码。

<?php
$array1 = array(
    'a'	=>  'caitou',
    'b'	=>  1,
    'c' =>  '666',
    'd'	=>  true
);
$array2 = array(
    'a'	=>	'caitou',
    'b'	=>  2,
    'c'	=>  '666',
    'd'	=>  true
);
print_r(array_diff($array1,$array2));

期望的结果是

Array
(
    [b] => 1
)

但是输出的结果却是

Array
(
)

后来网上找了很多,看了别人的博客再细看了PHP官方文档发现是自己粗心。官方文档是这样写的

array_diff ( array `$array1` , array `$array2` [, array `$...` ] ) : array

对比 array1 和其他一个或者多个数组,返回在 array1 中但是不在其他 array 里的值。

两个单元仅在 (string) $elem1 === (string) $elem2 时被认为是相同的。也就是说,当字符串的表达是一样的时候。

array_diff是比较两个数组的值,跟键是没有关系的。而且值比较的时候是把值转成字符串在比较的。(string)$array1['b']===(string)$array2['d']

注:一个布尔值 boolean 的TRUE被转换成 string 的 “1”。

所以输出的数组是空。

后来发现我需要的是array_diff_assoc。我们看下面的代码。

<?php
$array1 = array(
    'a'	=>  'caitou',
    'b'	=>  1,
    'c' =>  '666',
    'd'	=>  true
);
$array2 = array(
    'a'	=>	'caitou',
    'b'	=>  2,
    'c'	=>  '666',
    'd'	=>  true
);
print_r(array_diff_assoc($array1,$array2));

输出结果

Array
(
    [b] => 1
)

官方文档

array_diff_assoc ( array `$array1` , array `$array2` [, array `$...` ] ) : array

array_diff_assoc() 返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值。注意和 array_diff() 不同的是键名也用于比较。

键值对 key => value 中的两个值仅在 (string) $elem1 === (string) $elem2 时被认为相等。也就是说使用了严格检查,字符串的表达必须相同。

array_diff_assoc键名也会用于比较的。如:(string)$array1['b']===(string)array2['b']

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值