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中截取字符串支持utf-8
Jan 18 PHP
使用PHP遍历文件夹与子目录的函数代码
Sep 26 PHP
Zend studio文件注释模板设置方法
Sep 29 PHP
百度ping方法使用示例 自动ping百度
Jan 26 PHP
Yii学习总结之安装配置
Feb 22 PHP
php按单词截取字符串的方法
Apr 07 PHP
php实现过滤字符串中的中文和数字实例
Jul 29 PHP
php实现简单的上传进度条
Nov 17 PHP
PHP新特性详解之命名空间、性状与生成器
Jul 18 PHP
详解关于php的xdebug配置(编辑器vscode)
Jan 29 PHP
laravel实现上传图片,并且制作缩略图,按照日期存放的代码
Oct 16 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无限遍历文件夹示例分享
2014/03/04 PHP
php操作XML、读取数据和写入数据的实现代码
2014/08/15 PHP
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
php自动获取关键字的方法
2015/01/06 PHP
PHP实现补齐关闭的HTML标签
2016/03/22 PHP
PHP时间相关常用函数用法示例
2020/06/03 PHP
input+select(multiple) 实现下拉框输入值
2009/05/21 Javascript
js显示时间 js显示最后修改时间
2013/01/02 Javascript
JS实现金额转换(将输入的阿拉伯数字)转换成中文的实现代码
2013/09/30 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
关闭ie窗口清除Session的解决方法
2014/01/10 Javascript
JavaScript之AOP编程实例
2015/07/17 Javascript
js钢琴按钮波浪式图片排列效果代码分享
2015/08/26 Javascript
分享Javascript实用方法二
2015/12/13 Javascript
javascript函数命名的三种方式及区别介绍
2016/03/22 Javascript
微信小程序 网络API Websocket详解
2016/11/09 Javascript
AngularJS中$http使用的简单介绍
2017/03/17 Javascript
js使用原型对象(prototype)需要注意的地方
2017/08/28 Javascript
微信小程序系列之自定义顶部导航功能
2019/05/21 Javascript
React+EggJs实现断点续传的示例代码
2020/07/07 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
多种类型jQuery网页验证码插件代码实例
2021/01/09 jQuery
[55:45]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.24
2019/09/10 DOTA
OpenCV实现人脸识别
2017/04/07 Python
回调函数的意义以及python实现实例
2017/06/20 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
Django shell调试models输出的SQL语句方法
2019/08/29 Python
python将字母转化为数字实例方法
2019/10/04 Python
详解Python3迁移接口变化采坑记
2019/10/11 Python
写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度
2015/11/18 面试题
报关简历自我评价怎么写
2013/09/19 职场文书
南京青奥会口号
2014/06/12 职场文书
党校学习党性分析材料
2014/12/19 职场文书
检讨书范文大全
2015/05/07 职场文书
幼儿园卫生保健制度
2015/08/05 职场文书
职工培训工作总结
2015/08/10 职场文书