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 过滤危险html代码
Jun 29 PHP
PHP 配置文件中open_basedir选项作用
Jul 19 PHP
队列在编程中的实际应用(php)
Sep 04 PHP
php将fileterms函数返回的结果变成可读的形式
Apr 21 PHP
destoon整合UCenter图文教程
Jun 21 PHP
php查询ip所在地的方法
Dec 05 PHP
PHP获取youku视频真实flv文件地址的方法
Dec 23 PHP
php单一接口的实现方法
Jun 20 PHP
PHP从尾到头打印链表实例讲解
Sep 27 PHP
laravel 错误处理,接口错误返回json代码
Oct 25 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 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
php设置编码格式的方法
2013/03/05 PHP
php将图片保存入mysql数据库失败的解决方法
2014/12/27 PHP
JAVASCRIPT IE 与 FF中兼容问题小结
2009/02/18 Javascript
jQuery 使用手册(三)
2009/09/23 Javascript
详解JavaScript的策略模式编程
2015/06/24 Javascript
Javascript中函数名.length属性用法分析(对比arguments.length)
2016/09/16 Javascript
jQuery插件FusionCharts绘制的2D帕累托图效果示例【附demo源码】
2017/03/28 jQuery
给Easyui-Datebox设置隐藏或者不可用的解决方法
2017/05/26 Javascript
vue实现验证码输入框组件
2017/12/14 Javascript
详解nodejs 配置文件处理方案
2019/01/02 NodeJs
Node.js+Express+Mysql 实现增删改查
2019/04/03 Javascript
微信内置浏览器图片查看器的代码实例
2019/10/08 Javascript
vue中使用v-for时为什么不能用index作为key
2020/04/04 Javascript
Vue插件之滑动验证码用法详解
2020/04/05 Javascript
[36:19]2018DOTA2亚洲邀请赛 小组赛 A组加赛 Newbee vs LGD
2018/04/03 DOTA
[50:54]完美世界DOTA2联赛 GXR vs IO 第三场 11.07
2020/11/10 DOTA
python文件写入实例分析
2015/04/08 Python
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
Python中字典的setdefault()方法教程
2017/02/07 Python
python 多线程中子线程和主线程相互通信方法
2018/11/09 Python
python3.6编写的单元测试示例
2019/08/17 Python
简单了解python 生成器 列表推导式 生成器表达式
2019/08/22 Python
python实现截取屏幕保存文件,删除N天前截图的例子
2019/08/27 Python
Python如何对齐字符串
2020/07/30 Python
Python实现自动装机功能案例分析
2020/10/22 Python
python 从list中随机取值的方法
2020/11/16 Python
Speedo美国:澳大利亚顶尖泳衣制造商
2016/08/03 全球购物
New Balance加拿大官方网站:运动鞋和健身服装
2018/11/19 全球购物
size?爱尔兰官方网站:英国伦敦的球鞋精品店
2019/03/31 全球购物
腾讯广告词
2014/03/19 职场文书
工程承包协议书
2014/10/20 职场文书
12.4全国法制宣传日活动方案
2014/11/02 职场文书
端午节活动总结报告
2015/02/11 职场文书
小人国观后感
2015/06/11 职场文书
详解Apache SkyWalking 告警配置指南
2021/04/22 Servers
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
2022/06/01 Servers