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 相关文章推荐
PHP4 与 MySQL 数据库操作函数详解
Oct 09 PHP
中篇:安装及配置PHP
Dec 13 PHP
php格式化工具Beautify PHP小小BUG
Apr 24 PHP
apache+codeigniter 通过.htcaccess做动态二级域名解析
Jul 01 PHP
如何获知PHP程序占用多少内存(memory_get_usage)
Sep 23 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
Sep 22 PHP
PHP实现多级分类生成树的方法示例
Feb 07 PHP
thinkPHP中钩子的使用方法实例分析
Nov 16 PHP
Laravel源码解析之路由的使用和示例详解
Sep 27 PHP
PHP中的自动加载操作实现方法详解
Aug 06 PHP
PhpStorm连接服务器并实现自动上传功能
Dec 09 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
Mar 09 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
Apache 配置详解(最好的APACHE配置教程)
2010/07/04 PHP
简单的cookie计数器实现源码
2013/06/07 PHP
常见php数据文件缓存类汇总
2014/12/05 PHP
php数字每三位加逗号的功能函数
2015/10/22 PHP
php代码架构的八点注意事项
2016/01/25 PHP
深入浅出讲解:php的socket通信原理
2016/12/03 PHP
Smarty缓存机制实例详解【三种缓存方式】
2019/07/20 PHP
setTimeout与setInterval在不同浏览器下的差异
2010/01/24 Javascript
jQuery+CSS 实现随滚动条增减的汽水瓶中的液体效果
2011/09/26 Javascript
jQuery中eq()方法用法实例
2015/01/05 Javascript
JavaScript将Web页面内容导出到Word及Excel的方法
2015/02/13 Javascript
原生js与jQuery实现简单的tab切换特效对比
2015/07/30 Javascript
JQuery核心函数是什么及使用方法介绍
2016/05/03 Javascript
js 截取或者替换字符串中的数字实现方法
2016/06/13 Javascript
JavaScript中Form表单技术汇总(推荐)
2016/06/26 Javascript
Bootstrap基本插件学习笔记之Popover提示框(19)
2016/12/08 Javascript
jQuery页面弹出框实现文件上传
2017/02/09 Javascript
微信小程序 自定义Toast实例代码
2017/06/12 Javascript
使用Karma做vue组件单元测试的实现
2020/01/16 Javascript
React中Ref 的使用方法详解
2020/04/28 Javascript
vue移动端写的拖拽功能示例代码
2020/09/09 Javascript
使用js获取身份证年龄的示例代码
2020/12/11 Javascript
详解appium+python 启动一个app步骤
2017/12/20 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
Python Django切换MySQL数据库实例详解
2019/07/16 Python
Django之路由层的实现
2019/09/09 Python
Python接口自动化测试的实现
2020/08/28 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
用HTML5制作烟火效果的教程
2015/05/12 HTML / CSS
欧洲著名的珠宝和手表网上商城:uhrcenter
2017/04/10 全球购物
Willer台湾:日本高速巴士/夜行巴士预约
2017/07/09 全球购物
函授本科毕业生自我鉴定
2013/10/16 职场文书
项目专员岗位职责
2013/12/04 职场文书
部队万能检讨书
2014/02/20 职场文书
《雪域豹影》读后感:父爱的伟大
2019/12/23 职场文书
NASA 机智号火星直升机拍到了毅力号设备碎片
2022/04/29 数码科技