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
我的论坛源代码(七)
Oct 09 PHP
PHP parse_url 一个好用的函数
Oct 03 PHP
php自动给文章加关键词链接的函数代码
Nov 29 PHP
解析php中反射的应用
Jun 18 PHP
使用PHP Socket写的POP3类
Oct 30 PHP
mantis安装、配置和使用中的问题小结
Jul 14 PHP
ThinkPHP路由详解
Jul 27 PHP
Zend Framework教程之动作的基类Zend_Controller_Action详解
Mar 07 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
Mar 21 PHP
PHP静态方法和静态属性及常量属性的区别与介绍
Mar 22 PHP
PHP实现新型冠状病毒疫情实时图的实例
Feb 04 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+java实现自动新闻滚动窗口
2006/10/09 PHP
Smarty模板常见的简单应用分析
2016/11/15 PHP
php慢查询日志和错误日志使用详解
2021/02/27 PHP
javascript 变量作用域 代码分析
2009/06/26 Javascript
js怎么终止程序return不行换jfslk
2013/05/30 Javascript
JS检测图片大小的实例
2013/08/21 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
2014/06/15 Javascript
css与javascript跨浏览器兼容性总结
2014/09/15 Javascript
jQuery中:only-child选择器用法实例
2015/01/03 Javascript
jQuery实现高亮显示的方法
2015/03/10 Javascript
jQuery使用removeClass方法删除元素指定Class的方法
2015/03/26 Javascript
js全选按钮的实现方法
2015/11/17 Javascript
Javascript的表单验证-初识正则表达式
2016/03/18 Javascript
jQuery ajaxForm()的应用
2016/10/14 Javascript
bootstrap配合Masonry插件实现瀑布式布局
2017/01/18 Javascript
解决npm安装Electron缓慢网络超时导致失败的问题
2018/02/06 Javascript
node.js 模块和其下载资源的镜像设置的方法
2018/09/06 Javascript
JS中的算法与数据结构之常见排序(Sort)算法详解
2019/08/16 Javascript
浅谈vue 二级路由嵌套和二级路由高亮问题
2020/08/06 Javascript
Python实现发送email的几种常用方法
2014/08/18 Python
小小聊天室Python代码实现
2016/08/17 Python
Python selenium抓取微博内容的示例代码
2018/05/17 Python
Python之用户输入的实例
2018/06/22 Python
详解Django-channels 实现WebSocket实例
2019/08/22 Python
Pyinstaller加密打包应用的示例代码
2020/06/11 Python
python利用os模块编写文件复制功能——copy()函数用法
2020/07/13 Python
Node.js 和 Python之间该选择哪个?
2020/08/05 Python
Russell Stover巧克力官方网站:美国领先的精美巧克力制造商
2016/11/27 全球购物
英国皇室御用百货:福南梅森(Fortnum & Mason)
2017/12/03 全球购物
自荐信格式写作方法有哪些呢
2013/11/20 职场文书
优秀毕业自我鉴定
2014/02/15 职场文书
工作求职信
2014/07/04 职场文书
提档介绍信范文
2015/10/22 职场文书
Python基础之赋值,浅拷贝,深拷贝的区别
2021/04/30 Python
Jackson 反序列化时实现大小写不敏感设置
2021/06/29 Java/Android
解决flex布局中子项目尺寸不受flex-shrink限制
2022/05/11 HTML / CSS