文档章节

PHP array_diff() 函数的坑

zcqshine
 zcqshine
发布于 2016/07/14 11:03
字数 224
阅读 1.2K
收藏 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
粉丝 8
博文 48
码字总数 16180
作品 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
106
0
php中的数组函数学习记录1

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

mrmusic
2016/03/19
66
0
你可能不知道的一些PHP函数的特性

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

BearCatYN
2015/09/16
105
0
php比较两个数组的差异array_diff()函数

下面简单介绍php比较两个数组的差异array_diff()函数。 原文地址:小时刻个人技术博客 > http://small.aiweimeng.top/index.php/archives/9.html php内置函数中有一个array_diff():意思比较...

osc_8jk0uanm
2018/12/25
1
0
php 操作数组 (合并,拆分,追加,查找,删除等)

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

王锐
2012/08/17
94
1

没有更多内容

加载失败,请刷新页面

加载更多

springBoot之配置文件的读取以及过滤器和拦截器的使用

springBoot之配置文件的读取以及过滤器和拦截器的使用 前言 在之前的学习springBoot中,成功的实现了Restful风格的基本服务。但是想将之前的工程作为一个项目来说,那些是仅仅不够的。可能还...

鹏十二
6分钟前
5
0
Springboot在Idea Intellij汉字Unicode读取乱码问题

问题核心:Unicode编码中的字母需要小写。比如\u8bbe\u5907\u53f7 首先,了解清楚Unicode编码是什么东西。请读者自己搜索。 然后,我们要清楚springboot是怎么加载配置文件的。兴趣的读者可以...

sunranhou
11分钟前
11
0
服务器管理规范

1、为了保证服务器的安全,服务器的账号密码不能随便透露给他人,必须制定人员负责管理。 2、服务器至少要安装360安全卫士。以此保障服务器的安全。 3、服务器要设置定期重启(可以使用命令 ...

ethanleellj
13分钟前
11
0
工厂方法

1. 介绍 工厂方法模式(FACTORY METHOD)是一种常用的类创建型设计模式,此模式的核心精神是封装类中变化的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期...

steven-黄笑笑
15分钟前
4
0
Ubuntu 18.04 安装GRASS GIS 7.8.3

在之前的Ubuntu 16.04 安装 Grass gis 7.6.1中主要是通过添加ppa源的方法安装预编译包,但由于众所周知的原因可能会失败,所以最好的安装方法是下载源码后自己编译安装,下面是安装步骤: 安...

ddd口木呆
16分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部