PHP array_diff 的应用

来源:互联网 发布:mmd千本樱镜头数据 编辑:程序博客网 时间:2024/04/27 19:37

定义和用法:

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]   =>  添加

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

   








0 0
原创粉丝点击