admin 管理员组文章数量: 1184232
array
最近在开发项目的时候有需要数据对比,然后就用到了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 `$...` ] ) : arrayarray_diff_assoc() 返回一个数组,该数组包括了所有在
array1中但是不在任何其它参数数组中的值。注意和 array_diff() 不同的是键名也用于比较。键值对 key => value 中的两个值仅在 (string) $elem1 === (string) $elem2 时被认为相等。也就是说使用了严格检查,字符串的表达必须相同。
array_diff_assoc键名也会用于比较的。如:(string)$array1['b']===(string)array2['b']。
本文标签: array
版权声明:本文标题:array 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1687559826a115868.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论