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 相关文章推荐
模拟flock实现文件锁定
Feb 14 PHP
php str_replace的替换漏洞
Mar 15 PHP
PHP 年龄计算函数(精确到天)
Jun 07 PHP
php接口与接口引用的深入解析
Aug 09 PHP
配置php网页显示各种语法错误
Sep 23 PHP
php中session退出登陆问题
Feb 27 PHP
ThinkPHP单字母函数(快捷方法)使用总结
Jul 23 PHP
PHP实现的比较完善的购物车类
Dec 02 PHP
php实现上传图片保存到数据库的方法
Feb 11 PHP
php获取网站百度快照日期的方法
Jul 29 PHP
php制作圆形用户头像的实例_自定义封装类源代码
Sep 18 PHP
php传值和传引用的区别点总结
Nov 19 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
用文本文件实现的动态实时发布新闻的程序
2006/10/09 PHP
通俗易懂的php防注入代码
2010/04/07 PHP
laravel 5.3中自定义加密服务的方案详解
2017/05/09 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
thinkPHP5.1框架路由::get、post请求简单用法示例
2019/05/06 PHP
为你的 Laravel 验证器加上多验证场景的实现
2020/04/07 PHP
php实现简易计算器
2020/08/28 PHP
在网页中屏蔽快捷键
2006/09/06 Javascript
JavaScript String.replace函数参数实例说明
2013/06/06 Javascript
用js模拟struts2的多action调用示例
2014/05/19 Javascript
jQuery处理json数据返回数组和输出的方法
2015/03/11 Javascript
nodejs进阶(6)—连接MySQL数据库示例
2017/01/07 NodeJs
jQuery实现鼠标经过显示动画边框特效
2017/03/24 jQuery
HTML5实现微信拍摄上传照片功能
2017/04/21 Javascript
JS自定义滚动条效果简单实现代码
2020/10/27 Javascript
对angularJs中自定义指令replace的属性详解
2018/10/09 Javascript
vue里如何主动销毁keep-alive缓存的组件
2019/03/21 Javascript
浅谈vue 锚点指令v-anchor的使用
2019/11/13 Javascript
Python使用代理抓取网站图片(多线程)
2014/03/14 Python
处理Python中的URLError异常的方法
2015/04/30 Python
在Mac OS上使用mod_wsgi连接Python与Apache服务器
2015/12/24 Python
wxPython实现窗口用图片做背景
2018/04/25 Python
PyQt5 加载图片和文本文件的实例
2019/06/14 Python
使用python实现unix2dos和dos2unix命令的例子
2019/08/13 Python
Python代码生成视频的缩略图的实例讲解
2019/12/22 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
如何使用Python发送HTML格式的邮件
2020/02/11 Python
python使用布隆过滤器的实现示例
2020/08/20 Python
优秀学生干部个人的自我评价
2013/10/04 职场文书
煤矿班组长岗位职责
2013/12/29 职场文书
简历的个人自我评价范文
2014/01/03 职场文书
家长对学生的评语
2014/04/18 职场文书
学校师德承诺书
2014/05/23 职场文书
书法兴趣小组活动总结
2014/07/07 职场文书
2014年村支部书记四风对照检查材料思想汇报
2014/10/02 职场文书
SQL Server的存储过程与触发器以及系统函数和自定义函数
2022/04/10 SQL Server