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 相关文章推荐
MYSQL数据库初学者使用指南
Nov 16 PHP
中英文字符串翻转函数
Dec 09 PHP
PHP的autoload机制的实现解析
Sep 15 PHP
PHP实现将浏览历史页面网址保存到cookie的方法
Jan 26 PHP
ThinkPHP3.2.2的插件控制器功能
Mar 05 PHP
如何利用http协议发布博客园博文评论
Aug 03 PHP
yii使用activeFileField控件实现上传文件与图片的方法
Dec 28 PHP
PHP模拟post提交数据方法汇总
Feb 16 PHP
PHP6连接SQLServer2005的三部曲
Apr 15 PHP
Smarty分页实现方法完整实例
May 11 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
YII框架http缓存操作示例
Apr 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
一个取得文件扩展名的函数
2006/10/09 PHP
抓取YAHOO股票报价的类
2009/05/15 PHP
CodeIgniter 完美解决URL含有中文字符串
2016/05/13 PHP
非常好的js代码
2006/06/27 Javascript
js DataSet数据源处理代码
2010/03/29 Javascript
jquery下实现overlay遮罩层代码
2010/08/25 Javascript
自制轻量级仿jQuery.boxy对话框插件代码
2010/10/26 Javascript
js和css写一个可以自动隐藏的悬浮框
2014/03/05 Javascript
JS数组的赋值介绍
2014/03/10 Javascript
jQuery中index()方法用法实例
2014/12/27 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
2017/04/11 Javascript
bootstrap选项卡扩展功能详解
2017/06/14 Javascript
以BootStrap Tab为例写一个前端组件
2017/07/25 Javascript
jQueryUI Sortable 应用Demo(分享)
2017/09/07 jQuery
Node.js使用supervisor进行开发中调试的方法
2019/03/26 Javascript
vue实现多级菜单效果
2019/10/19 Javascript
vue 出现data-v-xxx的原因及解决
2020/08/04 Javascript
vue-video-player 断点续播的实现
2021/02/01 Vue.js
[58:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第一场 1月31日
2021/03/11 DOTA
python使用logging模块发送邮件代码示例
2018/01/18 Python
django使用xlwt导出excel文件实例代码
2018/02/06 Python
python版本的仿windows计划任务工具
2018/04/30 Python
python中class的定义及使用教程
2019/09/18 Python
css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局
2014/10/10 HTML / CSS
哥伦比亚最大的网上商店:Linio哥伦比亚
2016/09/25 全球购物
什么是Rollback Segment
2013/04/22 面试题
一些关于MySql加速和优化的面试题
2014/01/30 面试题
会计主管岗位职责
2014/01/03 职场文书
酒鬼酒广告词
2014/03/21 职场文书
毕业生对母校寄语
2015/02/26 职场文书
销售督导岗位职责
2015/04/10 职场文书
MySQL系列之十一 日志记录
2021/07/02 MySQL
nginx内存池源码解析
2021/11/20 Servers
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
2022/12/24 MySQL