php二维数组去重
php二维数组去重
前言:php一维数组去重很简单,直接array_unique($arr)即可,但是二维数组去重就得自己去写了
二维数组去重方法:
/*
* 二维数组去重
* 注意:二维数组中的元素个数必须一致,且键值也得一致,否则无意义
* @param array $arr
* @return array $arr_after
*/
public function array_unique_2DArr($arr=array()){
if(empty($arr) || !is_array($arr)){
return array();
}
/*******处理二维数组个数不一致问题 start 其他项目用可以去掉*******/
//判断数组中二维数组是否包含uniqueId,存在的话需要处理其他的日志信息,全部加上uniqueId,且uniqueId值必须相同
$hasUniqueId = false;
foreach($arr as $val){
if(array_key_exists('uniqueId', $val)){
$hasUniqueId = true;
break;
}
}
//如果$arr中的二维数组中uniqueId存在,则其他也增加
if($hasUniqueId){
foreach($arr as $_k=>$_val){
if(!array_key_exists('uniqueId', $_val)){
//在$_val中增加unique,只是为了和其他的带有uniqueId键值的数组元素个数保持一致
$_val_keys = array_keys($_val);
$_val_vals = array_values($_val);
array_unshift($_val_keys, 'uniqueId');
array_unshift($_val_vals, '0_0');
$arr[$_k] = array_combine($_val_keys, $_val_vals);
}
}
}
/********处理二维数组个数不一致问题 end********/
foreach($arr[0] as $k => $v){
$arr_inner_key[]= $k; //先把二维数组中的内层数组的键值记录在在一维数组中
}
foreach ($arr as $k => $v){
$v =join("^",$v); //降维 用implode()也行 ,注意,拆分时不能用逗号,用其他的不常用符号,逗号可能会由于数据本身含有逗号导致失败
$temp[$k] =$v; //保留原来的键值
}
$temp =array_unique($temp); //去重:去掉重复的字符串
foreach ($temp as $k => $v){
$a = explode("^",$v); //拆分后的重组
$arr_after[$k]= array_combine($arr_inner_key,$a); //将原来的键与值重新合并
}
return $arr_after;
}
php二维数组去重的更多相关文章
- PHP二维数组去重(指定键名)
本例对二维数组中某个指定键名进行去重,发现网上大多使用array_unique或是foreach遍历等方式去重,效果不佳且较为繁琐. 本文以二维数组去重为引,介绍array_column函数的三种用法 ...
- VB6 二维数组去重实现
关于VB6的二维数组去重算法实现 当然,这里还是有局限性,当我们的数组被填满了各个不同的值时,例如下方 700*700 = 490000 就要While49万次,这谁受得了? 所以以下仅适合小规模使用 ...
- 如何使用python将二维数组去重呢?
二维数组的去重,能和一维的方法类似吗?import numpyc=np.array(((1,2),(3,4),(5,6),(7,8),(7,8),(3,4),(1,2)))print('二维数组:\n ...
- np.unique()对一维和二维数组去重
numpy.unique(ar, return_index=False, return_inverse=False, return_counts=False, axis=None)[source] 一 ...
- PHP 二维数组去重(保留各个键值的同时去除重复的项)
对于如下二维数组,要求对其进行去重: $arr = array( '=>array( 'name'=>'james', , ), '=>array( 'name'=>'susu ...
- PHP 二维数组去重方法
php二维数组的去重策略,如果需要根据某字段去重(其他字段可能不一致),那么需要使用循环策略,如果去重的都是相同的(字段,值),那么可以用序列化方式. $allComments = array_map ...
- PHP使用array_unique对二维数组去重处理
去重,点这里,东西是好东西,就是有点懒.莫见怪
- php 一行代码解决二维数组去重
array_unique($array, SORT_REGULAR);
- php 二维数组去重
function remove_duplicate($array){ $result=array(); foreach ($array as $key => $value) { $has = f ...
随机推荐
- oracle无法启动asm实例记录
首先查看asm进程ps aux|grep asmasm进程没起进行下面操作su - gridsrvctl start asmexit查看ora进程ps aux|grep oraora进程没起进行下面操 ...
- Android invalidate()方法 requestLayout()方法分析
强调一点的就是,在onMeasure(),onLayout(),onDraw()这三个流程中,Google已经帮我们把draw()过程框架已经写好了,自定义的ViewGroup只需要实现 measur ...
- eclipse svn 忽略 target目录
这个build失败的解决方案就是不要把你项目的 target目录放在src repository 里面,还有 .project 和 .classpath最好也别放到src repository 里. ...
- 首个hybird商业项目踩坑总结
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...
- vue 动态组件、父子组件传参
1.vue中的自定义属性并获得属性的值 自定义属性::data-id语法为 :data-属性 获取属性的值:ev.target.dataset.id 2.vue父子组件传值 3.动态组件使用
- 【JAVA WEB教程】jsp环境搭建+部署网站(eclipse+tomcat)【详细+图文】
下载tomcat7.X 下载地址为:http://tomcat.apache.org/download-70.cgi 下载完成之后就开始安装 Next I Agree 选中所有的复选框 ...
- 详解@EnableWebMvc
最近看了<Spring in Action>的开头,就被Spring注解开发(完全不写web.xml)惊叹了,也第一次知道了@EnableWebMvc是SpringMVC的注解 @Enab ...
- MySQL查看 InnoDB表中每个索引的高度
我们都知道MySQL里,索引通常用B+树来实现的.B+树的叶子结点才具体保存数据(聚簇索引保存的是行数据:普通索引是主键,如有需要得回表),非叶子结点都是用来索引叶子结点的.假设索引高度为h,那么每次 ...
- Java Generator
以前我以为只有Python才会有generator,看来当时的我才年轻,后来认真研读<Thinking in Java>之后大有感悟,原来Java亦有generator,故做一次记录分享. ...
- angularjs小练习(分别通过ng-repeat和ng-option动态生成select下拉框)
本次做一个简单的关于动态生成select的练习 在实现上有两种方式: 其一.通过ng-repeat来实现 其二.通过ng-option来实现 在页面效果上,两种实现的效果都一样 但是在数据选择的数据从 ...