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 相关文章推荐
ajax php 实现写入数据库
Sep 02 PHP
PHP对字符串的递增运算分析
Aug 08 PHP
PHP程序员面试 切忌急功近利(更需要注重以后的发展)
Sep 01 PHP
PHP实现下载功能的代码
Sep 29 PHP
PHP代码审核的详细介绍
Jun 13 PHP
destoon安装出现Internal Server Error的解决方法
Jun 21 PHP
php实现的IMEI限制的短信验证码发送类
May 05 PHP
Smarty foreach控制循环次数的一些方法
Jul 01 PHP
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
Dec 25 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
Sep 29 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
Oct 06 PHP
Yii框架日志操作图文与实例详解
Sep 09 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
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
PHP中读取文件的8种方法和代码实例
2014/08/05 PHP
PHP也能干大事之PHP中的编码解码详解
2015/04/20 PHP
如何用PHP做到页面注册审核
2017/03/02 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
深入理解JavaScript定时机制
2010/10/29 Javascript
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
2010/12/10 Javascript
js 自制滚动条的小例子
2013/03/16 Javascript
简单的代码实现jquery定时器
2014/01/03 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
2015/08/15 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
你真的了解BOM中的history对象吗
2017/02/13 Javascript
js中document.referrer实现移动端返回上一页
2017/02/22 Javascript
Vue原理剖析 实现双向绑定MVVM
2017/05/03 Javascript
解决Vue中mounted钩子函数获取节点高度出错问题
2018/05/18 Javascript
详解angular分页插件tm.pagination二次触发问题解决方案
2018/07/20 Javascript
Nuxt升级2.0.0时出现的问题(小结)
2018/10/08 Javascript
vue+layui实现select动态加载后台数据的例子
2019/09/20 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
Vue之封装公用变量以及实现方式
2020/07/31 Javascript
[11:44]Ti9 OG夺冠时刻
2019/08/25 DOTA
将图片文件嵌入到wxpython代码中的实现方法
2014/08/11 Python
举例讲解Python设计模式编程中的访问者与观察者模式
2016/01/26 Python
在Python运行时动态查看进程内部信息的方法
2019/02/22 Python
浅析Python 读取图像文件的性能对比
2019/03/07 Python
Python彻底删除文件夹及其子文件方式
2019/12/23 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
python默认参数调用方法解析
2020/02/09 Python
宝塔面板成功部署Django项目流程(图文)
2020/06/22 Python
关于css兼容性问题及一些常见问题汇总
2016/05/03 HTML / CSS
HTML5 canvas基本绘图之绘制线条
2016/06/27 HTML / CSS
美国维生素、补充剂、保健食品购物网站:Vitacost
2016/08/05 全球购物
日本高岛屋百货购物网站:TAKASHIMAYA
2019/03/24 全球购物
感恩母亲节演讲稿
2014/05/07 职场文书
公司副总经理岗位职责
2014/10/01 职场文书
python爬取豆瓣电影TOP250数据
2021/05/23 Python