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实现多服务器共享SESSION数据的方法
Mar 16 PHP
php 定义404页面的实现代码
Nov 19 PHP
PHP中的按位与和按位或操作示例
Jan 27 PHP
PHP基本语法总结
Sep 06 PHP
thinkphp数据查询和遍历数组实例
Nov 28 PHP
PHP中大于2038年时间戳的问题处理方案
Mar 03 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
Mar 13 PHP
Symfony2创建页面实例详解
Mar 18 PHP
Symfony查询方法实例小结
Jun 28 PHP
PHP类的自动加载机制实现方法分析
Jan 10 PHP
PHP标准库 (SPL)――Countable用法示例
Jun 05 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
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
判“新”函数:得到今天与明天的秒数
2006/10/09 PHP
怎样去阅读一份php源代码
2009/08/21 PHP
php木马webshell扫描器代码
2012/01/25 PHP
非常实用的php弹出错误警告函数扩展性强
2014/01/17 PHP
PHP常用的小程序代码段
2015/11/14 PHP
PHP中PDO连接数据库中各种DNS设置方法小结
2016/05/13 PHP
JSON字符串传到后台PHP处理问题的解决方法
2016/06/05 PHP
PHP实现通过文本文件统计页面访问量功能示例
2019/02/13 PHP
JavaScript window.setTimeout() 的详细用法
2009/11/04 Javascript
鼠标右击事件代码(asp.net后台)
2011/01/27 Javascript
mailto的使用技巧分享
2012/12/21 Javascript
JavaScript判断是否为数组的3种方法及效率比较
2015/04/01 Javascript
JS中创建函数的三种方式及区别
2016/03/13 Javascript
深入理解jquery中的事件与动画
2016/05/24 Javascript
详解AngularJS中的表单验证(推荐)
2016/11/17 Javascript
微信小程序如何再次获取用户授权的方法
2019/05/10 Javascript
微信提示 在浏览器打开 效果实现过程解析
2019/09/10 Javascript
vue.js购物车添加商品组件的方法
2019/09/17 Javascript
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
vue-amap根据地址回显地图并mark的操作
2020/11/03 Javascript
Python文件夹与文件的相关操作(推荐)
2016/07/25 Python
基于Python闭包及其作用域详解
2017/08/28 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
2019/04/18 Python
python3 webp转gif格式的实现示例
2019/12/10 Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
2020/02/13 Python
计算机应用与科学个人的自我评价
2013/11/15 职场文书
时尚休闲吧创业计划书
2014/01/25 职场文书
四风对照检查剖析材料
2014/10/07 职场文书
商场收银员岗位职责
2015/04/07 职场文书
2015年超市工作总结范文
2015/05/26 职场文书
爱国主义电影观后感
2015/06/18 职场文书
副校长2015年教育教学工作总结
2015/07/27 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js
SQL实现LeetCode(180.连续的数字)
2021/08/04 MySQL