文档章节

PHP array_diff() 函数的坑

zcqshine
 zcqshine
发布于 2016/07/14 11:03
字数 224
阅读 404
收藏 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
博文 40
码字总数 12879
作品 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中的数组函数学习记录1

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

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

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

BearCatYN
2015/09/16
77
0
PHP从数组中删除元素的四种方法实例

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

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

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

王锐
2012/08/17
0
1

没有更多内容

加载失败,请刷新页面

加载更多

打包QML程序

1、windeployqt执行路径(D:\Qt\5.12.0\msvc2017_64\bin)加入到PATH中 2、使用Qt自带的命令行交互 Command 终端(Qt 5.12.0 64-bit for Desktop (MSVC 2017))切换到 Release 编译成功的exe...

渣渣曦
34分钟前
2
0
优秀互联网高级测试工程师应该具备的能力

概述 在之前写的互联网高级测试工程师至少具备的能力一文中,提到了测试工程师至少具备的能力,但是并没有提到优秀测试工程师应该具备的能力,下文简单的谈一谈。当然这些全部都是我的个人理...

Sam哥哥聊技术
37分钟前
2
0
webpack项目配置

前端工程化 前端工程化是根据业务特点,将前端开发流程规范化,标准化,它包括了开发流程、技术选型、代码规范、构建发布等等,用语提升前端工程师的开发效率和代码质量。 自动化构建工具 1、...

羊皮卷
40分钟前
0
0
Linux命令备忘录: jobs 显示Linux中的任务列表及任务状态命令

jobs命令用于显示Linux中的任务列表及任务状态,包括后台运行的任务。该命令可以显示任务号及其对应的进程号。其中,任务号是以普通用户的角度进行的,而进程号则是从系统管理员的角度来看的...

开元中国2015
今天
3
0
springboot Whitelabel Error Page(Not Found)解决方案

当出现上图图的错误时注意 报错信息 There was an unexpected error (type=Not Found, status=404). Not Found代表未访问到资源 解决方案:比较访问路径和代码的路径有没有写错 正确的访问路...

斩神魂
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部