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代码
Aug 08 PHP
php HandlerSocket的使用
May 02 PHP
php设计模式 Bridge (桥接模式)
Jun 26 PHP
PHP采集腾讯微博的实现代码
Jan 19 PHP
php压缩HTML函数轻松实现压缩html/js/Css及注意事项
Jan 27 PHP
PHP中的替代语法简介
Aug 22 PHP
PHP中require和include路径问题详解
Dec 25 PHP
支持中文的PHP按字符串长度分割成数组代码
May 17 PHP
Yii CDBCriteria常用方法实例小结
Jan 19 PHP
PHP中file_put_contents追加和换行的实现方法
Apr 01 PHP
PHP实现的mysql主从数据库状态检测功能示例
Jul 20 PHP
PHP实现求解最长公共子串问题的方法
Nov 17 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/11/10 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
2016/06/12 PHP
php实现等比例不失真缩放上传图片的方法
2016/11/14 PHP
JavaScript 核心参考教程 内置对象
2009/10/13 Javascript
Jquery弹出窗口插件 LeanModal的使用方法
2012/03/10 Javascript
javascript与cookie 的问题详解
2013/11/11 Javascript
将HTML的左右尖括号等转义成实体形式的两种实现方式
2014/05/04 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
2015/01/13 Javascript
JavaScript删除指定子元素代码实例
2015/01/13 Javascript
JS实现可自定义大小,可双击关闭的弹出层效果
2015/10/16 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
JS如何判断json是否为空
2016/07/06 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
2016/08/01 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
javascript 动态生成css代码的两种方法
2017/03/17 Javascript
nodejs中向HTTP响应传送进程的输出
2017/03/19 NodeJs
AngularJS基于http请求实现下载php生成的excel文件功能示例
2018/01/23 Javascript
JavaScript实现简单轮播图效果
2018/12/01 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
H5+css3+js搭建带验证码的登录页面
2020/10/11 Javascript
[03:01]完美世界DOTA2联赛PWL S2 集锦第二期
2020/12/03 DOTA
Python 文件和输入输出小结
2013/10/09 Python
python自动安装pip
2014/04/24 Python
详解python之heapq模块及排序操作
2019/04/04 Python
Pycharm github配置实现过程图解
2020/10/13 Python
HTML5中5个简单实用的API(第二篇,含全屏、可见性、拍照、预加载、电池状态)
2014/05/07 HTML / CSS
植村秀美国官网:Shu Uemura美国
2019/03/19 全球购物
Contém1g官网:巴西彩妆品牌
2020/01/17 全球购物
七年级政治教学反思
2014/02/03 职场文书
技能竞赛活动方案
2014/02/21 职场文书
会计求职信
2014/05/29 职场文书
行政文员实习自我鉴定范文
2014/09/14 职场文书
项目技术负责人岗位职责
2015/04/13 职场文书
大学生村官入党自传
2015/06/26 职场文书
javascript拖曳互换div的位置实现示例
2021/06/28 Javascript
详解JSON.parse和JSON.stringify用法
2022/02/18 Javascript