PHP二维数组实现去除重复项的方法【保留各个键值】


Posted in PHP onDecember 21, 2017

本文实例讲述了PHP二维数组实现去除重复项的方法。分享给大家供大家参考,具体如下:

对于如下二维数组,要求对其进行去重:

$arr = array(
     '0'=>array(
          'name'=>'james',
          'age'=>30,
          ),
     '1'=>array(
          'name'=>'susu',
          'age'=>26,
          ),
     '2'=>array(
          'name'=>'james',
          'age'=>30,
          ),
     'new'=>array(
          'name'=>'kube',
          'age'=>37,
          ),
     'list'=>array(
          'name'=>'kube',
          'age'=>27,
          ),
     );

1、 二维数组内部的一维数组中的值不能完全相同,删除其中重复的项:

代码如下:

<?php
$arr = array(
     '0'=>array(
          'name'=>'james',
          'age'=>30,
          ),
     '1'=>array(
          'name'=>'susu',
          'age'=>26,
          ),
      '2'=>array(
          'name'=>'james',
          'age'=>30,
          ),
      'new'=>array(
          'name'=>'kube',
          'age'=>37,
          ),
      'list'=>array(
          'name'=>'kube',
          'age'=>27,
          ),
      );
printf("Before tranform the array:<br>");  //输出原来的数组
print_r($arr);
echo "<br/>";
function more_array_unique($arr=array()){
  foreach($arr[0] as $k => $v){
    $arr_inner_key[]= $k;  //先把二维数组中的内层数组的键值记录在在一维数组中
  }
  foreach ($arras $k => $v){
    $v =join(",",$v);  //降维 用implode()也行
    $temp[$k] =$v;   //保留原来的键值 $temp[]即为不保留原来键值
  }
  printf("After split the array:<br>");
  print_r($temp);  //输出拆分后的数组
  echo"<br/>";
  $temp =array_unique($temp);  //去重:去掉重复的字符串
  foreach ($tempas $k => $v){
    $a = explode(",",$v);  //拆分后的重组 如:Array( [0] => james [1] => 30 )
    $arr_after[$k]= array_combine($arr_inner_key,$a); //将原来的键与值重新合并
  }
  //ksort($arr_after);//排序如需要:ksort对数组进行排序(保留原键值key) ,sort为不保留key值
  return$arr_after;
}
$arr_new = more_array_unique($arr); //调用去重函数
printf("Duplicate removal of the array:<br>");
print_r($arr_new);
echo "<br/>";
?>

输出结果:

Before tranform the array:  //原来数组
Array ( [0] => Array ( [name] => james [age] => 30 ) [1] => Array ([name] => susu [age] => 26 ) [2] => Array ( [name] => james [age]=> 30 ) [new] => Array ( [name] => kube [age] => 37 ) [list] =>Array ( [name] => kube [age] => 27 ) )
After split the array: //拆分后数组
Array ( [0] => james,30 [1] => susu,26 [2] => james,30 [new] =>kube,37 [list] => kube,27 )
Duplicate removal of thearray: //去重后数组
Array ( [0] => Array ( [name] => james [age] => 30 ) [1] => Array ([name] => susu [age] => 26 ) [new] => Array ( [name] => kube [age]=> 37 ) [list] => Array ( [name] => kube [age] => 27 ) )

2、 二维数组内部的一维数组因某一个键值不能相同,删除重复项:

针对某一个键值来进行去重

<?php
$arr= array(……); //同上的二维数组
functionsecond_array_unique_bykey($arr, $key){
  $tmp_arr = array();
  foreach($arr as $k => $v)
  {
    if(in_array($v[$key], $tmp_arr))  //搜索$v[$key]是否在$tmp_arr数组中存在,若存在返回true
    {
      unset($arr[$k]); //销毁一个变量 如果$tmp_arr中已存在相同的值就删除该值
    }
    else {
      $tmp_arr[$k] = $v[$key]; //将不同的值放在该数组中保存
    }
  }
  //ksort($arr); //ksort函数对数组进行排序(保留原键值key) sort为不保留key值
  return $arr;
  }
  $key ='name';
  $arr_key = second_array_unique_bykey($arr,$key);
  printf("As for the givenkey->%s:<br>",$key);
  print_r($arr_key);
  echo "<br/>";
?>

输出结果:

As for the given key->name:
Array ( [0] => Array ( [name] => james [age] => 30 ) [1] => Array ([name] => susu [age] => 26 ) [new] => Array ( [name] => kube [age]=> 37 ) )

PS:本站还有两款比较简单实用的在线文本去重复工具,推荐给大家使用:

在线去除重复项工具:
http://tools.3water.com/code/quchong

在线文本去重复工具:
http://tools.3water.com/aideddesign/txt_quchong

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
DEDE采集大师官方留后门的删除办法
Jan 08 PHP
基于php在各种web服务器的运行模式详解
Jun 03 PHP
PHP flush()与ob_flush()的区别详解
Jun 03 PHP
解析func_num_args与func_get_args函数的使用
Jun 24 PHP
php使用正则表达式进行字符串搜索的方法
Mar 23 PHP
php计算到指定日期还有多少天的方法
Apr 14 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
Jul 08 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
Apr 28 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
Oct 19 PHP
php array_values 返回数组的值实例详解
Nov 17 PHP
PHP进阶学习之类的自动加载机制原理分析
Jun 18 PHP
tp5框架前台无限极导航菜单类实现方法分析
Mar 29 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
Dec 21 #PHP
PHP实现生成模糊图片的方法示例
Dec 21 #PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
Dec 21 #PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 #PHP
php获取微信共享收货地址的方法
Dec 21 #PHP
php实现socket推送技术的示例
Dec 20 #PHP
PHP实现模拟http请求的方法分析
Dec 20 #PHP
You might like
php 获取全局变量的代码
2011/04/21 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
2020/04/05 PHP
判断脚本加载是否完成的方法
2009/05/26 Javascript
html超链接打开窗口大小的方法
2013/03/05 Javascript
复选框全选与全不选操作实现思路
2013/08/18 Javascript
深入理解jQuery之事件移除
2016/06/02 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
2017/06/26 Javascript
彻底弄懂 JavaScript 执行机制
2018/10/23 Javascript
浅谈Javascript常用正则表达式应用
2019/03/08 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
2019/05/21 Javascript
vue-cli3+ts+webpack实现多入口多出口功能
2019/05/30 Javascript
vuex vue简单使用知识点总结
2019/08/29 Javascript
JavaScript实现网页留言板功能
2020/11/23 Javascript
[01:28:43]2014 DOTA2华西杯精英邀请赛5 24 DK VS CIS
2014/05/25 DOTA
利用QT写一个极简单的图形化Python闹钟程序
2015/04/07 Python
讲解Python中的标识运算符
2015/05/14 Python
Python中关于使用模块的基础知识
2015/05/24 Python
python解析html提取数据,并生成word文档实例解析
2018/01/22 Python
Python求两点之间的直线距离(2种实现方法)
2019/07/07 Python
Django Rest framework认证组件详细用法
2019/07/25 Python
python tkinter实现彩球碰撞屏保
2019/07/30 Python
TensorFlow查看输入节点和输出节点名称方式
2020/01/04 Python
Matlab使用Plot函数实现数据动态显示方法总结
2021/02/25 Python
“型”走纽约上东区:Sam Edelman
2017/04/02 全球购物
北美领先的智能产品购物网站:Wellbots
2018/06/11 全球购物
戴尔荷兰官方网站:Dell荷兰
2020/10/04 全球购物
索桥的故事教学反思
2014/02/06 职场文书
十佳好少年事迹材料
2014/08/21 职场文书
公安机关党的群众路线教育实践活动剖析材料
2014/10/10 职场文书
银行优秀员工推荐信
2015/03/24 职场文书
宝葫芦的秘密观后感
2015/06/11 职场文书
心理健康教育主题班会
2015/08/13 职场文书
Python中zipfile压缩包模块的使用
2021/05/14 Python
Python 实现定积分与二重定积分的操作
2021/05/26 Python
JavaScript实现队列结构过程
2021/12/06 Javascript
SpringBoot中HttpSessionListener的简单使用方式
2022/03/17 Java/Android