文档章节

PHP array_diff() 函数的坑

zcqshine
 zcqshine
发布于 2016/07/14 11:03
字数 224
阅读 398
收藏 3
点赞 0
评论 4

这次在项目中使用 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
博文 39
码字总数 12795
作品 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

你可能不知道的一些PHP函数的特性

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

BearCatYN ⋅ 2015/09/16 ⋅ 0

php中的数组函数学习记录1

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

mrmusic ⋅ 2016/03/19 ⋅ 0

php 操作数组 (合并,拆分,追加,查找,删除等)

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

王锐 ⋅ 2012/08/17 ⋅ 1

php 操作数组 (合并,拆分,追加,查找,删除等)

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

mdoo ⋅ 2016/09/04 ⋅ 0

经验之谈PHP数组函数总结

PHP中的数组实际上是一个有序图,图是一种把values映射到keys的类型。此类型在很多方面做了优化,因此你可以把它当成真正的数组来使用,或列表(矢量),散列表(是图的一种实现),字典,集...

mickelfeng ⋅ 2012/11/05 ⋅ 0

php 数组的指针操作

array("key"=>"value");建立数组 //显示数组 printr($array); //使用compact()函数新建数组,并把参数做为新数组的单元; $newArray = compact("red","green","yellow","blue","array"); //使用......

五味格子 ⋅ 2011/05/11 ⋅ 0

PHP数组函数再学习

将数组$arr分割为n个数组,并存放到一个二维数组中 返回值 二维数组第三个参数表示 是否保留原来的下标 取数组差/交集 一般内容操作 用给定的值填充数组。给$arr指定下标起给定值 并且追加数量...

o0无忧亦无怖 ⋅ 2015/10/18 ⋅ 0

php中的回调函数怎么理解

在阅读php手册,关于数组函数的一些使用当中,里面有些使用的是回调函数,说是用户可以自己定义,那么这个回调函数改怎么去理解?就像下面这个 function keycomparefunc($a, $b) { if ($a =...

mrmusic ⋅ 2016/03/18 ⋅ 2

PHP瓜分两个数组的相同元素和不同元素的两种方法

一、举例说明   例如有两个数组A和B(当然这个A和B也可以是key=>value形式)   A = array('tt','cc','dd','mm')   B = array('ad','tt','cc','qq')   希望得到的结果是:   sameA...

梦梦阁 ⋅ 2015/12/04 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 12分钟前 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 17分钟前 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 19分钟前 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 38分钟前 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 44分钟前 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 45分钟前 ⋅ 0

监控各项服务

比如有三个服务, 为了减少故障时间,增加监控任务,使用linux的 crontab 实现. 步骤: 1,每个服务写一个ping接口 监控如下内容: 1,HouseServer 是否正常运行,所以需要增加一个ping的接口 ; http...

黄威 ⋅ 48分钟前 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 49分钟前 ⋅ 0

nodejs __proto__跟prototype

前言 nodejs中完全没有class的这个概念,这点跟PHP,JAVA等面向对象的语言很不一样,没有class跟object的区分,那么nodejs是怎么样实现继承的呢? 对象 对象是由属性跟方法组成的一个东西,就...

Ai5tbb ⋅ 55分钟前 ⋅ 0

Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库

Q: Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库 A: 执行以下2条命令解决: apt-get install php-mysql service apache2 restart php -m 执行后会多以下4个模块: mysqli mysqlnd...

SamXIAO ⋅ 57分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部