Heim >Backend-Entwicklung >PHP-Tutorial >PHP array_diff 的应用
定义和用法:
array_diff() 函数返回两个数组的差集数组。该数组包括了所有在被比较的数组中,但是不在任何其他参数数组中的键值。
在返回的数组中,键名保持不变。
语法
array_diff(<em>array1</em>,<em>array2</em>,<em>array3</em>...);
参数 | 描述 |
array1 | 必需。与其他数组进行比较的第一个数组。 |
array2 | 必需。与第一个数组进行比较的数组。 |
array3 | 可选。与第一个数组进行比较的其他数组 |
提示:可用一个或任意多个数组与第一个数组进行比较。
返回值
返回值: | 返回差集数组,该数组包括了所有在被比较的数组(array1)中,但是不在任何其他参数数组(array2 或 array3 等等)中的键值。 |
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教程有兴趣的朋友有所帮助。