文档章节

PHP array_diff() 函数的坑

zcqshine
 zcqshine
发布于 2016/07/14 11:03
字数 224
阅读 416
收藏 3

这次在项目中使用 array_diff 函数被坑了. 有如下两个二维数组:

$ary1 = array(
        array('uid'=>1,'name' => "zhangsan1"),
        array('uid'=>2,'name' => "zhangsan2"),
        array('uid'=>3,'name' => "zhangsan3"),
        array('uid'=>4,'name' => "zhangsan4"),
);

$ary2 = array(
        array('uid'=>3,'name' => "zhangsan2"),
        array('uid'=>4,'name' => "zhangsan3"),
);

求这两个数组的差集, 用 array_diff() 函数:

$ary3 = array_diff($ary1, $ary2);

var_dump($ary3);

输出结果为array(0) {}, 哈哈, 是不是很坑啊.

如果用在一维数组上, 也只比较了值, 并没有比较键, 也就是说只要值是一样的, 就会被剔除掉, 而不管键是否一样, 例如:

$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2=array("e"=>"red","f"=>"black","g"=>"purple");
$a3=array("a"=>"red","b"=>"black","j"=>"yellow");

$result=array_diff($a1,$a2,$a3);
print_r($result);

输出结果为:Array ( [b] => green [c] => blue )

如果要键也参与比较则需要使用 array_diff_assoc() 函数

© 著作权归作者所有

共有 人打赏支持
zcqshine
粉丝 6
博文 42
码字总数 14192
作品 0
深圳
高级程序员
私信 提问
加载中

评论(4)

zcqshine
zcqshine

引用来自“free_as_wind”的评论

Note: This function only checks one dimension of a n-dimensional array. Of course you can check deeper dimensions by using array_diff($array10, $array20);
嗯, 用的时候没注意.
zcqshine
zcqshine

引用来自“Geomen”的评论

手册上有注释的,这个方法只比较多维数组的一维的哦!
Note:
注意本函数只检查了多维数组中的一维。当然可以用 array_diff($array10, $array20); 检查更深的维度。
嗯, 是的, 我也是后来查手册的时候看到的. 用的时候没注意,
free_as_wind
free_as_wind
Note: This function only checks one dimension of a n-dimensional array. Of course you can check deeper dimensions by using array_diff($array10, $array20);
Geomen
Geomen
手册上有注释的,这个方法只比较多维数组的一维的哦!
Note:
注意本函数只检查了多维数组中的一维。当然可以用 array_diff($array10, $array20); 检查更深的维度。
php数组遍历的差异(array_diff)实现

初次接到这个题目,我发现这非常的简单,于是按照以往的经验“随便”写了一个: function arraydiff($array1, $array2) { $diff = array(); foreach ($array1 as $k => $v1) { $flag = false...

安安-Anan
2015/08/12
0
0
你可能不知道的一些PHP函数的特性

这篇文章介绍的这些函数你可能都知道,也都用过,但是有一些细小的点你可能没有注意,而且开发中也会用到这些点,当你用到的时候,能想到这些PHP函数的特性,那么你不仅开发效率高,而且代码...

BearCatYN
2015/09/16
77
0
php中的数组函数学习记录1

1、返回字符串键名全为小写或大写的数组。arraychangekeycase 用法:arraychangekeycase($input (array),CASEUPPER|CASELOWER),其中CASELOWER是返回小写(默认),CASEUPPER返回大写 例子: ...

mrmusic
2016/03/19
45
0
PHP从数组中删除元素的四种方法实例

删除一个元素,且保持原有索引不变 使用 unset 函数,示例如下: 输出 使用 unset 并未改变数组的原有索引。如果打算重排索引(让索引从0开始,并且连续),可以使用 array_values 函数: 删...

度_
09/13
0
0
php 操作数组 (合并,拆分,追加,查找,删除等)

合并数组 array_merge()函数将数组合并到一起,返回一个联合的数组。所得到的数组以第一个输入数组参数开始,按后面数组参数出现的顺序依次迫加。其形式为: Php代码 收藏代码 array array_...

mdoo
2016/09/04
20
0

没有更多内容

加载失败,请刷新页面

加载更多

搭建git服务器————gitlab

github毕竟是公开的,而私有仓库又得花钱买。所以我们可以想办法搭建一个私有的,只自己公司使用的。Gitlab是个不错的选择。在介绍它之前,先讲述一下命令行的git服务器 找一台服务器,首先要...

chencheng-linux
14分钟前
2
0
用Redis实现“秒杀”系统

导论 曾经被问过好多次怎样实现秒杀系统的问题。昨天又在CSDN架构师微信群被问到了。因此这里把我设想的实现秒杀系统的价格设计分享出来。供大家参考。 秒杀系统的架构设计 秒杀系统,是典型...

小刀爱编程
27分钟前
7
0
GO redis 相关操作

在gopath 目录下安装 go get github.com/garyburd/redigo/redis package mainimport ("fmt""github.com/garyburd/redigo/redis")//定义一个全局链接池变量var pool *redis.Pool//......

汤汤圆圆
今天
20
0
java8性特性,常用的lambda表达式

1、抽取多个对象中的某个属性,用数组接收 List<Student> students = new ArrayList<>(); List<String> names =students.stream().map(Student::getName).collect(Collectors.toList()); 2、......

Boss-x
今天
19
0
flutter 子组件与父组件

无论是子组件还是父组件,任何时候initState()只执行一次,如果需要判断 就在build里面进行,不然无效的。

大灰狼wow
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部