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 全文搜索和替换的实现代码
Jul 29 PHP
PHP 删除一个目录及目录下的所有文件的函数代码
May 26 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
Jul 04 PHP
PHP 验证码的实现代码
Jul 17 PHP
php Smarty初体验二 获取配置信息
Aug 08 PHP
PHP学习笔记 用户注册模块用户类以及验证码类
Sep 20 PHP
PHP中“简单工厂模式”实例代码讲解
Sep 04 PHP
php文件操作相关类实例
Jun 18 PHP
PHP获取input输入框中的值去数据库比较显示出来
Nov 16 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
Feb 15 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
Jul 19 PHP
PHP添加文字水印或图片水印的水印类完整源代码与使用示例
Mar 18 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
攻克CakePHP系列二 表单数据显示
2008/10/22 PHP
解析php中eclipse 用空格替换 tab键
2013/06/24 PHP
php对csv文件的读取,写入,输出下载操作详解
2013/08/10 PHP
PHP实现基于mysqli的Model基类完整实例
2016/04/08 PHP
PHP基于反射机制实现插件的可插拔设计详解
2016/11/10 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
PHP加MySQL消息队列深入理解
2021/02/27 PHP
jQuery EasyUI 中文API Layout(Tabs)
2010/04/27 Javascript
jquery下异步提交表单 异步跨域提交表单
2010/11/17 Javascript
控制input输入框中提示信息的显示和隐藏的方法
2014/02/12 Javascript
JavaScript截取、切割字符串的技巧
2016/01/07 Javascript
浅析Javascript匿名函数与自执行函数
2016/02/06 Javascript
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
2016/04/03 Javascript
jquery插件实现轮播图效果
2020/10/19 jQuery
vue-router路由懒加载及实现的3种方式
2021/02/28 Vue.js
Python实现求最大公约数及判断素数的方法
2015/05/26 Python
python数据类型_元组、字典常用操作方法(介绍)
2017/05/30 Python
浅谈Python黑帽子取代netcat
2018/02/10 Python
python爬虫实现中英翻译词典
2019/06/25 Python
Python 切分数组实例解析
2019/11/07 Python
python 利用turtle库绘制笑脸和哭脸的例子
2019/11/23 Python
pymysql之cur.fetchall() 和cur.fetchone()用法详解
2020/05/15 Python
Python实例方法、类方法、静态方法区别详解
2020/09/05 Python
纯css3实现效果超级炫的checkbox复选框和radio单选框
2014/09/01 HTML / CSS
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
2014/11/05 HTML / CSS
HTML5 文件上传下载的实例代码
2017/07/03 HTML / CSS
Html5获取高德地图定位天气的方法
2019/12/26 HTML / CSS
迪斯尼假期(欧洲、中东及非洲):Disney Holidays EMEA
2021/02/15 全球购物
文员个人求职自荐信
2013/09/21 职场文书
汽车维修与检测专业应届生求职信
2013/11/12 职场文书
总经理秘书岗位职责
2014/03/17 职场文书
元宵晚会主持词
2014/03/25 职场文书
2014年大学生工作总结
2014/11/20 职场文书
css3中2D转换之有趣的transform形变效果
2022/02/24 HTML / CSS
了解Kubernetes中的Service和Endpoint
2022/04/01 Servers
Android在Sqlite3中的应用及多线程使用数据库的建议
2022/04/24 Java/Android