php使用array_column实现二维数组指定键名去重

数组去重在开发中是常见的使用操作功能,在常规的数据优化或处理中也是一个必不可少的需求之一。

基于php开发,要如何将二维数组的数据按照指定的键名检测键值是否重复并去重呢?

这里就用到了PHP的array_column()函数,通过该函数可以巧妙的将一组二维数组根据指定键名对键值进行去重处理。

关于array_column()函数的定义:返回输入数组中某个单一列的值。

从定义中并没有得到直观的信息,这里就直接跟随代码来看看如何实现指定键名去重。

一、需要去重的数据:
$arr = array(
array('id'=>1,'title'=>'thinkphp6怎么开启、关闭调试模式'),
array('id'=>2,'title'=>'JavaScript使用ajax读取txt文件内容代码详解'),
array('id'=>1,'title'=>'宝塔上不同域名之间引入图片或css、js异常')
);
二、去除id重复的数据
print_r(array_column($arr,null,'id'));
//执行结果如下:
$arr = Array(
[1] => Array('id'=>2,'title'=>'JavaScript使用ajax读取txt文件内容代码详解'),
[2] => Array('id'=>1,'title'=>'宝塔上不同域名之间引入图片或css、js异常')
);

注:这里根据id去重,id相同的数据只保留最后一个数据。

看到这里,你只看到了实现了你想要的效果。却没有实质的解释来说明其中的原理,下面关于array_column()函数的语法可以给你解释它去重的原理。

语法:array_column(array,column_key,index_key);

array:即指定要使用的多维数组,该参数为“必需”。

column_key:必需。需要返回值的列。可以是索引数组的列的整数索引,或者是关联数组的列的字符串键值。该参数也可以是 NULL,此时将返回整个数组。

index_key:可选。作为返回数组的索引/键的列。

去重原理解析:三个参数中你只需要认真去解读index_key参数,即作为返回数组的索引/键的列。那么就是将你指定键名的值作为键名来生成新的数据,大家都知道键名相同的数据,后面的数据会覆盖掉前面键名相同的数据。也就是说数组中键名时唯一的,如果你将要去重的数据作为键名使用,那么依照键名唯一的属性你最终的数据只会是唯一的。

以$arr这组数据为例。

//原生效果为:
$arr = array(
0 => array('id'=>1,'title'=>'thinkphp6怎么开启、关闭调试模式'),
1 => array('id'=>2,'title'=>'JavaScript使用ajax读取txt文件内容代码详解'),
2 => array('id'=>1,'title'=>'宝塔上不同域名之间引入图片或css、js异常')
);
//使用array_column函数id为例,得到的为去重数据如下
$arr = array(
1 => array('id'=>1,'title'=>'thinkphp6怎么开启、关闭调试模式'),
2 => array('id'=>2,'title'=>'JavaScript使用ajax读取txt文件内容代码详解'),
1 => array('id'=>1,'title'=>'宝塔上不同域名之间引入图片或css、js异常')
);
//从上面数据可以看出,第一条数据和第三条数据的键名都是1。相同键名后面的数据会覆盖前面的数据,也就是第三条数据会覆盖掉第一条数据。即最终结果如下
$arr = array(
1 => array('id'=>1,'title'=>'宝塔上不同域名之间引入图片或css、js异常'),
2 => array('id'=>2,'title'=>'JavaScript使用ajax读取txt文件内容代码详解'),
);

依照键名唯一的属性需求,array_column指定列便实现了去重效果。

六月初字帖坊小程序 你想要的字帖模板及工具,这里都有!