php 数组元素快速去重


Posted in PHP onMay 05, 2017

1.使用array_unique方法进行去重

对数组元素进行去重,我们一般会使用array_unique方法,使用这个方法可以把数组中的元素去重。

<?php
$arr = array(1,1,2,3,3,3,4,4,5,6,6,7,8,8,9,9,9);
$arr = array_unique($arr);
$arr = array_values($arr);
print_r($arr);
?>

输出:

Array
(
  [0] => 1
  [1] => 2
  [2] => 3
  [3] => 4
  [4] => 5
  [5] => 6
  [6] => 7
  [7] => 8
  [8] => 9
)

去重后,键值会不按顺序,可以使用array_values把键值重新排序。

2.使用array_unique方法去重效率

<?php
$arr = array();

// 创建100000个随机元素的数组
for($i=0; $i<100000; $i++){
  $arr[] = mt_rand(1,99);
}

// 记录开始时间
$starttime = getMicrotime();

// 去重
$arr = array_unique($arr);

// 记录结束时间
$endtime = getMicrotime();

$arr = array_values($arr);

echo 'unique count:'.count($arr).'<br>';
echo 'run time:'.(float)(($endtime-$starttime)*1000).'ms<br>';
echo 'use memory:'.getUseMemory();

/**
 * 获取使用内存
 * @return float
 */
function getUseMemory(){
  $use_memory = round(memory_get_usage(true)/1024,2).'kb';
  return $use_memory;
}
/**
 * 获取microtime
 * @return float
 */
function getMicrotime(){
  list($usec, $sec) = explode(' ', microtime());
  return (float)$usec + (float)$sec;
}
?>

unique count:99
run time:653.39303016663ms
use memory:5120kb

使用array_unique方法去重,运行时间需要约650ms,内存占用约5m

3.更快的数组去重方法

PHP有一个键值互换的方法array_flip,我们可以使用这个方法去重,因为键值互换,原来重复的值会变为相同的键。

然后再进行一次键值互换,把键和值换回来则可以完成去重。

<?php
$arr = array();

// 创建100000个随机元素的数组
for($i=0; $i<100000; $i++){
  $arr[] = mt_rand(1,99);
}

// 记录开始时间
$starttime = getMicrotime();

// 使用键值互换去重
$arr = array_flip($arr);
$arr = array_flip($arr);

// 记录结束时间
$endtime = getMicrotime();

$arr = array_values($arr);

echo 'unique count:'.count($arr).'<br>';
echo 'run time:'.(float)(($endtime-$starttime)*1000).'ms<br>';
echo 'use memory:'.getUseMemory();

/**
 * 获取使用内存
 * @return float
 */
function getUseMemory(){
  $use_memory = round(memory_get_usage(true)/1024,2).'kb';
  return $use_memory;
}
/**
 * 获取microtime
 * @return float
 */
function getMicrotime(){
  list($usec, $sec) = explode(' ', microtime());
  return (float)$usec + (float)$sec;
}
?>

unique count:99
run time:12.840032577515ms
use memory:768kb

使用array_flip方法去重,运行时间需要约18ms,内存占用约2m

因此使用array_flip方法去重比使用array_unique方法运行时间减少98%,内存占用减少4/5;

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

PHP 相关文章推荐
PHP 命令行参数详解及应用
May 18 PHP
PHP高级对象构建 工厂模式的使用
Feb 05 PHP
PHP中对缓冲区的控制实现代码
Sep 29 PHP
ThinkPHP模板Switch标签用法示例
Jun 30 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
Nov 18 PHP
PHP rsa加密解密使用方法
Apr 27 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
Dec 23 PHP
全面解读PHP的Yii框架中的日志功能
Mar 17 PHP
PHP使用PHPExcel删除Excel单元格指定列的方法
Jul 06 PHP
php实现多维数组排序的方法示例
Mar 23 PHP
PHP封装的验证码工具类定义与用法示例
Aug 22 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
Apr 04 PHP
Yii2实现自定义独立验证器的方法
May 05 #PHP
php 查找数组元素提高效率的方法详解
May 05 #PHP
thinkPHP分页功能实例详解
May 05 #PHP
php cli模式下获取参数的方法
May 05 #PHP
ajax调用返回php接口返回json数据的方法(必看篇)
May 05 #PHP
ThinkPHP 3.2.2实现事务操作的方法
May 05 #PHP
PHP实现Session入库/存入redis的方法
May 04 #PHP
You might like
Thinkphp使用mongodb数据库实现多条件查询方法
2014/06/26 PHP
php实现的简单日志写入函数
2015/03/31 PHP
PHP与Java对比学习日期时间函数
2016/07/03 PHP
PHP获取客户端及服务器端IP的封装类
2016/07/21 PHP
使用Zttp简化Guzzle 调用
2017/07/02 PHP
JavaScript去除空格的几种方法
2006/10/03 Javascript
jQuery文件上传插件Uploadify使用指南
2014/06/05 Javascript
JQuery实现动态添加删除评论的方法
2015/05/18 Javascript
微信小程序使用swiper组件实现层叠轮播图
2018/11/04 Javascript
js实现图片放大并跟随鼠标移动特效
2019/01/18 Javascript
Node.js之readline模块的使用详解
2019/03/25 Javascript
在Layui中实现开关按钮的效果实例
2019/09/29 Javascript
Vue3.0数据响应式原理详解
2019/10/09 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
2020/07/18 Javascript
微信小程序调用后台service教程详解
2020/11/06 Javascript
[42:20]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python脚本实现格式化css文件
2015/04/08 Python
Python中的字符串查找操作方法总结
2016/06/27 Python
Python实现代码统计工具(终极篇)
2016/07/04 Python
举例讲解Python编程中对线程锁的使用
2016/07/12 Python
python2.7实现FTP文件下载功能
2018/04/15 Python
python中virtualenvwrapper安装与使用
2018/05/20 Python
python+selenium实现自动化百度搜索关键词
2019/06/03 Python
linux环境中没有网络怎么下载python
2019/07/07 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
英国最大的在线床超市:Bed Star
2019/01/24 全球购物
COS美国官网:知名服装品牌
2019/04/08 全球购物
Simons官方网站:加拿大时尚零售商
2020/02/20 全球购物
指针和引用有什么区别
2013/01/13 面试题
怎样在程序里获得一个空指针
2015/01/24 面试题
电脑销售顾问自荐信
2014/01/29 职场文书
大学生社会实践方案
2014/05/11 职场文书
教师党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
初三语文教学计划
2015/01/22 职场文书
教你怎么用PyCharm为同一服务器配置多个python解释器
2021/05/31 Python
Python 语言实现六大查找算法
2021/06/30 Python