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 中的输出缓冲
Dec 21 PHP
php_screw 1.5:php加密: 安装与使用详解
Jun 20 PHP
ThinkPHP字符串函数及常用函数汇总
Jul 18 PHP
PHP统计目录大小的自定义函数分享
Nov 18 PHP
php在linux下检测mysql同步状态的方法
Jan 15 PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
Nov 05 PHP
PHP+mysql实现从数据库获取下拉树功能示例
Jan 06 PHP
PHP输出多个元素的排列或组合的方法
Mar 14 PHP
php strftime函数的详细用法
Jun 21 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
Sep 16 PHP
Yii Framework框架开发微信公众平台示例
Apr 26 PHP
一文搞懂php的垃圾回收机制
Jun 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
PHP截取中文字符串的问题
2006/07/12 PHP
有关 PHP 和 MySQL 时区的一点总结
2008/03/26 PHP
PHP 字符串编码截取函数(兼容utf-8和gb2312)
2009/05/02 PHP
PHP rawurlencode与urlencode函数的深入分析
2013/06/08 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
Jquery 1.42 checkbox 全选和反选代码
2010/03/27 Javascript
提取字符串中年月日的函数代码
2013/11/05 Javascript
JavaScript中用sort()方法对数组元素进行排序的操作
2015/06/09 Javascript
JS实现消息来时让网页标题闪动效果的方法
2016/04/20 Javascript
值得分享的轻量级Bootstrap Table表格插件
2016/05/30 Javascript
javascript insertAfter()定义与用法示例
2016/07/25 Javascript
基于cssSlidy.js插件实现响应式手机图片轮播效果
2016/08/30 Javascript
微信小程序 自定义消息提示框
2017/08/06 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
2019/08/27 Javascript
微信小程序vant弹窗组件的实现方式
2020/02/21 Javascript
利用Python的Twisted框架实现webshell密码扫描器的教程
2015/04/16 Python
利用matplotlib+numpy绘制多种绘图的方法实例
2017/05/03 Python
Python使用crontab模块设置和清除定时任务操作详解
2019/04/09 Python
python自动发邮件总结及实例说明【推荐】
2019/05/31 Python
linux下安装python3和对应的pip环境教程详解
2019/07/01 Python
Python如何访问字符串中的值
2020/02/09 Python
Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码
2020/05/28 Python
python如何建立全零数组
2020/07/19 Python
详解Django中views数据查询使用locals()函数进行优化
2020/08/24 Python
python如何实现图片压缩
2020/09/11 Python
python判断all函数输出结果是否为true的方法
2020/12/03 Python
英国花园药房: The Garden Pharmacy
2017/12/28 全球购物
法国发饰品牌:Alexandre De Paris
2018/12/04 全球购物
拉夫劳伦爱尔兰官方网站:Ralph Lauren爱尔兰
2020/04/10 全球购物
骨干教师培训方案
2014/05/06 职场文书
信用卡工作证明模板
2014/09/14 职场文书
情侣之间的道歉短信
2015/05/12 职场文书
七年级作文之《我和我的祖国》观后感作文
2019/10/18 职场文书
2019年幼儿园家长接送责任书
2019/10/29 职场文书
教你使用vscode 搭建react-native开发环境
2021/07/07 Javascript
Python机器学习应用之基于线性判别模型的分类篇详解
2022/01/18 Python