欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP array_diff 的应用

程序员文章站 2022-03-25 15:57:13
...
定义和用法:

array_diff() 函数返回两个数组的差集数组。该数组包括了所有在被比较的数组中,但是不在任何其他参数数组中的键值。

在返回的数组中,键名保持不变。

语法

array_diff(array1,array2,array3...);
参数 描述
array1 必需。与其他数组进行比较的第一个数组。
array2 必需。与第一个数组进行比较的数组。
array3 可选。与第一个数组进行比较的其他数组
提示和注释

提示:可用一个或任意多个数组与第一个数组进行比较。

返回值

返回值: 返回差集数组,该数组包括了所有在被比较的数组(array1)中,但是不在任何其他参数数组(array2array3 等等)中的键值。
PHP 版本: 4.0.1+

说明:

网上是这样说的,但我平时用的时候,只知道他是比较差集的,也没怎么多想,但是最近我的项目中有关于标签的处理问题,用到了这个,以前从来没有这样用过,这里记录下,以后再有这种情况,也可以应用下.

我的业务要求:每个客户可以有单个或者多个标签,而标签存储要存储为单条或者多条记录,那么对于添加,很简单了,就是添加一条,或者批量添加多条记录,但是修改,就不太一样了,就是以最新的为主,通俗的说,就是要是旧标签里面不包含新的标签,那么我们要添加新标签,删除旧标签. 但是还有情况是: 假如旧标签中有部分是包含新标签的其中一个或者多个,那么问题就是,我们出去旧标签中不包含新标签的,添加新标签在旧标签中不存在的.估计有点晕了,我举例说明一下:

举例:

旧标签: [A, B, C ]

新标签: [C, D, E]

分析如下:

1: 其实我们目的是: 以新的为准: 我们要把新标签中的D, E添加, 把旧标签中的A,B 删除

像上面这种情况, 我第一次想到就是把旧标签全删除,然后添加新的,不就行了, 但是细细想想不妥, 删除啊,什么概念啊,我知道对于数据表中的数据删除,是很慎重的,再说了,现在可能项目中,每个用户就有几个标签,那要是有很多个那,难道我们还要删除吗? 还有就是当我们删除表数据时, 会发现数据文件尺寸并没有减小。这是因为删除操作后在数据文件中留下碎片所致. 所以这种方法不可取!

然后可能我又会想到,遍历他们吧,让后进行比较,不对照的添加或者删除,我发现这种特别麻烦,两个数据都要进行遍历,数据要一条一条进行比较,数据少还行,数据多了,就不好了!

所以这次我们想到一个办法,就是利用了php函数array-diff()

例如:

1: array_diff (旧, 新) => [A, B] => 删除(修改状态为:禁用状态)

2: array_diff(新, 旧) => [D ,E] => 添加

上面是不是解决了问题,既把旧的处理了,也把新的添加了,是不是不错的..........


以上就介绍了 PHP array_diff 的应用,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。