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 相关文章推荐
smarty静态实验表明,网络上是错的~呵呵
Nov 25 PHP
介绍php设计模式中的工厂模式
Jun 12 PHP
php sprintf()函数让你的sql操作更安全
Jul 23 PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
May 10 PHP
phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)
Mar 27 PHP
PHP中使用unset销毁变量并内存释放问题
Jul 05 PHP
PHP中3种生成XML文件方法的速度效率比较
Oct 06 PHP
PHP页面中文乱码分析
Oct 29 PHP
wordpress安装过程中遇到中文乱码的处理方法
Apr 21 PHP
简单解决微信文章图片防盗链问题
Dec 17 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
Mar 12 PHP
thinkphp框架类库扩展操作示例
Nov 26 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
加速XP搜索功能堪比vista
2007/03/22 PHP
PHP中删除变量时unset()和null的区别分析
2011/01/27 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
PHP引用返回用法示例
2016/05/28 PHP
CI框架附属类用法分析
2018/12/26 PHP
一次因composer错误使用引发的问题与解决
2019/03/06 PHP
JavaScript 解析Json字符串的性能比较分析代码
2009/12/16 Javascript
Javascript中的相等与不等运算
2010/04/25 Javascript
异步加载script的代码
2011/01/12 Javascript
jquery图片不完全按比例自动缩小的简单代码
2013/07/29 Javascript
纯javascript实现选择框的全选与反选功能
2019/04/08 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
2019/09/10 Javascript
[02:08]我的刀塔不可能这么可爱 胡晓桃_1
2014/06/20 DOTA
Python 的 Socket 编程
2015/03/24 Python
Python新手在作用域方面经常容易碰到的问题
2015/04/03 Python
Ubuntu安装Jupyter Notebook教程
2017/10/18 Python
Python将多个excel文件合并为一个文件
2018/01/03 Python
Python实现PS滤镜功能之波浪特效示例
2018/01/26 Python
python中验证码连通域分割的方法详解
2018/06/04 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
python_opencv用线段画封闭矩形的实例
2018/12/05 Python
PIL对上传到Django的图片进行处理并保存的实例
2019/08/07 Python
python实现12306登录并保存cookie的方法示例
2019/12/17 Python
不到20行实现Python代码即可制作精美证件照
2020/04/24 Python
详解python对象之间的交互
2020/09/29 Python
NBA欧洲商店(西班牙):NBA Europe Store ES
2019/04/16 全球购物
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
Kappa英国官方在线商店:服装和运动器材
2020/11/22 全球购物
网络工程师的自我评价
2013/10/02 职场文书
中专生求职自荐信范文
2013/12/22 职场文书
我的未来不是梦演讲稿
2014/09/02 职场文书
2014年保卫工作总结
2014/12/05 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书
寒假生活随笔
2015/08/15 职场文书
2016年优秀班主任先进事迹材料
2016/02/26 职场文书
全家福照片寄语怎么写?
2019/04/02 职场文书