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安全编程之加密功能
Oct 09 PHP
用php写的serv-u的web申请账号的程序
Oct 09 PHP
杏林同学录(四)
Oct 09 PHP
用ADODB来让PHP操作ACCESS数据库的方法
Dec 31 PHP
PHP 时间转换Unix时间戳代码
Jan 22 PHP
分享一个超好用的php header下载函数
Jan 31 PHP
PHP把小数转成整数3种方法
Jun 30 PHP
php使用Jpgraph绘制3D饼状图的方法
Jun 10 PHP
实例简介PHP的一些高级面向对象编程的特性
Nov 27 PHP
PHP实现的简单AES加密解密算法实例
May 29 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
Sep 21 PHP
PHP PDOStatement::fetch讲解
Jan 31 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 Memcached应用实现代码
2010/02/08 PHP
使用php检测用户当前使用的浏览器是否为IE浏览器
2013/12/03 PHP
php获取从百度搜索进入网站的关键词的详细代码
2014/01/08 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
PHP实现的解汉诺塔问题算法示例
2018/08/06 PHP
ThinkPHP框架实现的微信支付接口开发完整示例
2019/04/10 PHP
javascript制作的简单注册模块表单验证
2015/04/13 Javascript
jQuery+CSS3折叠卡片式下拉列表框实现效果
2015/11/02 Javascript
js文本框输入内容智能提示效果
2015/12/02 Javascript
bootstrap vue.js实现tab效果
2017/02/07 Javascript
BACKBONE.JS 简单入门范例
2017/10/17 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
原生js封装的ajax方法示例
2018/08/02 Javascript
javascript实现的字符串转换成数组操作示例
2019/06/13 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
2020/07/21 Javascript
[41:37]DOTA2北京网鱼队选拔赛——冲击职业之路
2015/04/13 DOTA
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
快速解决安装python没有scripts文件夹的问题
2018/04/03 Python
pandas.loc 选取指定列进行操作的实例
2018/05/18 Python
Python 自动登录淘宝并保存登录信息的方法
2019/09/04 Python
python 实现return返回多个值
2019/11/19 Python
flask利用flask-wtf验证上传的文件的方法
2020/01/17 Python
python实现一次性封装多条sql语句(begin end)
2020/06/06 Python
用于ETL的Python数据转换工具详解
2020/07/21 Python
Python unittest生成测试报告过程解析
2020/09/08 Python
Python 操作SQLite数据库的示例
2020/10/16 Python
微信小程序实现可实时改变转速的css3旋转动画实例代码
2018/09/11 HTML / CSS
马德里著名的运动鞋商店:NOIRFONCE
2019/04/12 全球购物
2014年计生工作总结
2014/11/21 职场文书
2015年学生会个人工作总结
2015/04/09 职场文书
班主任开场白
2015/06/01 职场文书
2016年大学生寒假社会实践心得体会
2015/10/09 职场文书
2019年消防宣传标语集锦
2019/11/21 职场文书
Python torch.flatten()函数案例详解
2021/08/30 Python
详解MySQL的内连接和外连接
2023/05/08 MySQL