PHP数组去重比较快的实现方式


Posted in PHP onJanuary 19, 2016

概述

使用PHP的array_unique()函数允许你传递一个数组,然后移除重复的值,返回一个拥有唯一值的数组。这个函数大多数情况下都能工作得很好。但是,如果你尝试在一个大的数组里使用array_unique()函数,它会运行地慢一些。

有一个比较好而且更快的函数array_flip()来替代使用array_unique()函数来创建唯一的数组。这个魔法般的函数会交换数组里面每一个元素的键和值,因为键值必须唯一,因此,你会得到跟array_unique()函数一样的结果。

更快的方式实现PHP数组去重

/* 创建一个包含重复值的,一共四个元素的数组 */
$array = array('green','blue','orange','blue');
/* 翻转数组,你将会得到唯一键值的数组
array('green'=>0,'blue'=>1,'orange'=>2); */
$array = array_flip($array);
/* 然后再翻转一次,将键和值重新放置,然后得到数组:array(0=>'green',1=>'blue',2=>'orange'); */
$array = array_flip($array);

因为我们已经移除了一些元素,因此数组看起来不是正常的序列。比如我们可能会得到:array(0=>'A',2=>'B',5=>'C');。在某些情况下,这不是一个问题,但是如果你需要数组的键值保持数字的序列,你可以使用一到两种方法解决键值乱序的问题。

使用array_merge修复数组的keys

添加array_flip之后的函数,将会对数组的键值排序并且让它们恢复到正常的序列,如:0,1,2,3…

$array = array('green','blue','orange','blue');
$array = array_flip($array);
$array = array_flip($array);
/* 使用array_merge()函数修复键值*/
$array = array_merge($array); 
 

第二种方式,使用array_keys

注意,这种修复数组键值的方法比使用array_merge()函数稍微快了一点。你也可以在最后一步结合使用array_keys()函数(此函数返回翻转后的值)。然后当你翻转数组的值,键值就会根据顺序创建。

$array = array('green','blue','orange','blue');
$array = array_flip($array);
/* 跟第一个例子一样,但是现在我们先提取数组的键值 */
$array = array_keys($array);

结论

非常简单,比起在大数组使用array_unique函数,有了一个有效的性能提升。

PHP 相关文章推荐
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
Jan 29 PHP
PHP中的float类型使用说明
Jul 27 PHP
php中echo()和print()、require()和include()等易混淆函数的区别
Feb 22 PHP
php设计模式小结
Feb 15 PHP
利用中国天气预报接口实现简单天气预报
Jan 20 PHP
php获取服务器端mac和客户端mac的地址支持WIN/LINUX
May 15 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
Nov 10 PHP
PHP按指定键值对二维数组进行排序的方法
Dec 22 PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 PHP
php生成毫秒时间戳的实例讲解
Sep 22 PHP
laravel批量生成假数据的方法
Oct 09 PHP
php中用unset销毁变量并释放内存
May 10 PHP
PHP保存session到memcache服务器的方法
Jan 19 #PHP
PHP mysql事务问题实例分析
Jan 18 #PHP
给PHP开发者的编程指南 第一部分降低复杂程度
Jan 18 #PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
Jan 15 #PHP
php实现的操作excel类详解
Jan 15 #PHP
php实现的xml操作类
Jan 15 #PHP
PHP基于单例模式实现的数据库操作基类
Jan 15 #PHP
You might like
php批量缩放图片的代码[ini参数控制]
2011/02/11 PHP
供参考的 php 学习提高路线分享
2011/10/23 PHP
CI框架(CodeIgniter)实现的导入、导出数据操作示例
2018/05/24 PHP
PHP使用PDO操作sqlite数据库应用案例
2019/03/07 PHP
用JavaScript获取DOM元素位置和尺寸大小的方法
2013/04/12 Javascript
jQuery contains过滤器实现精确匹配使用方法
2013/04/12 Javascript
js history对象简单实现返回和前进
2013/10/30 Javascript
jQuery中$.fn的用法示例介绍
2013/11/05 Javascript
js图片延迟技术一般的思路与示例
2014/03/20 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
2014/05/28 Javascript
jquery中ready()函数执行的时机和window的load事件比较
2015/06/22 Javascript
基于jQuery实现仿51job城市选择功能实例代码
2016/03/02 Javascript
使用jQuery Mobile框架开发移动端Web App的入门教程
2016/05/17 Javascript
three.js绘制地球、飞机与轨迹的效果示例
2017/02/28 Javascript
Vue实现左右菜单联动实现代码
2018/08/12 Javascript
Vue源码中要const _toStr = Object.prototype.toString的原因分析
2018/12/09 Javascript
[06:42]DOTA2每周TOP10 精彩击杀集锦vol.1
2014/06/25 DOTA
详解Python中的Cookie模块使用
2015/07/06 Python
Python黑魔法@property装饰器的使用技巧解析
2016/06/16 Python
Python排序算法实例代码
2017/08/10 Python
Python实现感知机(PLA)算法
2017/12/20 Python
python获取微信企业号打卡数据并生成windows计划任务
2019/04/30 Python
对python中 math模块下 atan 和 atan2的区别详解
2020/01/17 Python
css3新单位vw、vh的使用教程
2018/03/23 HTML / CSS
埃弗顿足球俱乐部官方网上商店:Everton Direct
2018/01/13 全球购物
Giglio美国站:意大利奢侈品购物网
2018/02/10 全球购物
学生的自我鉴定范文
2013/10/24 职场文书
大学活动策划书范文
2014/01/10 职场文书
中学教师教育感言
2014/02/21 职场文书
总经理任命书
2014/03/29 职场文书
社会实践先进工作者事迹材料
2014/05/06 职场文书
小学校园之星事迹材料
2014/05/16 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
2014年保密工作总结
2014/11/22 职场文书
2014年教研室工作总结
2014/12/06 职场文书
门面租赁合同范文
2019/08/06 职场文书