记一次使用 array_diff 使用的误区

以下两个数组

$arr1 = ['a', 'b', 'c'];
$arr2 = ['b', 'c', 'd'];

当使用array_diff时,预想着是会返回 ['a', 'd'], 实际结果只返回了['a']

$diff = array_diff($arr1, $arr2);
print_r($diff); // ['a']

然后查php.net 是这么说:

对比 array1 和其他一个或者多个数组,返回在 array1 中但是不在其他 array 里的值。

重点在这句话:返回在 array1 中但是不在其他 array 里的值

也就是说$arr2只会和$arr1中有的值比较相当于这样:

$arr1 = ['a', 'b', 'c'];
$arr2 = ['b', 'c']; // 因为d不在$arr1数组内
// $arr2 = ['b', 'c', 'd'];
print_r(array_diff($arr1, $arr2)); //['a']

当然多个数组的话也是一样的

$arr1 = ['a', 'b', 'c'];
$arr2 = ['b', 'c', 'd'];
$arr3 = ['c', 'd', 'f'];

array_diff($arr1, $arr2, $arr3);
//实际类似这样比较
$arr1 = ['a', 'b', 'c'];
$arr2 = ['b', 'c']; // 因为c不在$arr1中
$arr3 = ['c']; // 因为d,f不在$arr1中

print_r(array_diff($arr1, $arr2, $arr3)); //['a']

所以最后的结果为 ['a']

第一次写文章,如有理解上的错误请大家指出

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

$arr1 = ['a', 'b', '{'1','2','3'}'];
$arr2 = ['b', 'c', '{'4','5','6'}']
数组中包含json格式数据,如何做对比?

4年前 评论
zxr615 (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!