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基础知识:类与对象(3) 构造函数和析构函数
Dec 13 PHP
php采集速度探究总结(原创)
Apr 18 PHP
PHP spl_autoload_register实现自动加载研究
Dec 06 PHP
Win下如何安装PHP的APC拓展
Aug 07 PHP
PHP小技巧之函数重载
Jun 02 PHP
让ThinkPHP支持大小写url地址访问的方法
Oct 31 PHP
php查找指定目录下指定大小文件的方法
Nov 28 PHP
php 自定义错误日志实例详解
Nov 12 PHP
php使用GD2绘制几何图形示例
Feb 15 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 PHP
详解thinkphp中的volist标签
Jan 15 PHP
PHP+MySQL实现在线测试答题实例
Jan 02 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
BBS(php &amp; mysql)完整版(四)
2006/10/09 PHP
PHP连接操作access数据库实例
2015/03/30 PHP
php英文单词统计器
2016/06/23 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
2016/07/09 PHP
YUI 读码日记之 YAHOO.lang.is*
2008/03/22 Javascript
javascript 禁止复制网页
2009/06/11 Javascript
Javascript 检测、添加、移除样式(className)函数代码
2009/09/08 Javascript
js生成随机数之random函数随机示例
2013/12/20 Javascript
jQuery统计上传文件大小的方法
2015/01/24 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
JavaScript中数据结构与算法(四):串(BF)
2015/06/19 Javascript
在Node.js中使用HTTP上传文件的方法
2015/06/23 Javascript
jquery插件jquery.LightBox.js实现点击放大图片并左右点击切换效果(附demo源码下载)
2016/02/25 Javascript
jQuery Mobile动态刷新页面样式的实现方法
2016/05/28 Javascript
详解vue.js组件化开发实践
2016/12/14 Javascript
JS滚轮控制图片缩放大小和拖动的实例代码
2018/11/20 Javascript
微信小程序实现多个按钮的颜色状态转换
2019/02/15 Javascript
js实现微信聊天界面
2020/08/09 Javascript
python网络编程实例简析
2014/09/26 Python
python安装cx_Oracle模块常见问题与解决方法
2017/02/21 Python
Python实现针对中文排序的方法
2017/05/09 Python
Python实现JSON反序列化类对象的示例
2018/01/31 Python
python分块读取大数据,避免内存不足的方法
2018/12/10 Python
使用python将请求的requests headers参数格式化方法
2019/01/02 Python
python实现贪吃蛇小游戏
2020/03/21 Python
python使用opencv对图像mask处理的方法
2019/07/05 Python
利用Python实现手机短信监控通知的方法
2019/07/22 Python
python与idea的集成的实现
2020/11/20 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
2021/01/12 Python
英国运动风奢侈品购物网站:Maison De Fashion
2020/08/28 全球购物
十佳护士先进事迹
2014/05/08 职场文书
副科级后备干部考察材料
2014/05/15 职场文书
五五普法心得体会
2014/09/04 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
卡特教练观后感
2015/06/08 职场文书
Java中PriorityQueue实现最小堆和最大堆的用法
2021/06/27 Java/Android