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 相关文章推荐
PHP简介
Oct 09 PHP
PHP代码审核的详细介绍
Jun 13 PHP
解析PHP汉字转换拼音的类
Jun 18 PHP
php操作mongoDB实例分析
Dec 29 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
Jul 04 PHP
php把数组值转换成键的方法
Jul 13 PHP
WordPress迁移时一些常见问题的解决方法整理
Nov 24 PHP
Thinkphp框架开发移动端接口(1)
Aug 18 PHP
yii2.0数据库迁移教程【多个数据库同时同步数据】
Oct 08 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
Jun 30 PHP
PHP模型Model类封装数据库操作示例
Mar 14 PHP
不常用但很实用的PHP预定义变量分析
Jun 25 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
在PWS上安装PHP4.0正式版
2006/10/09 PHP
php中实现记住密码下次自动登录的例子
2014/11/06 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
2015/05/25 PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
2017/11/25 PHP
jquery索引在使用中的一些困惑
2013/10/24 Javascript
JS实现倒计时和文字滚动的效果实例
2014/10/29 Javascript
JavaScript正则表达式实例详解
2016/10/16 Javascript
原生js实现秒表计时器功能
2017/02/16 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
2018/03/14 Javascript
vue 点击按钮增加一行的方法
2018/09/07 Javascript
基于Angular中ng-controller父子级嵌套的相关属性详解
2018/10/08 Javascript
vue的keep-alive中使用EventBus的方法
2019/04/23 Javascript
vue项目前端错误收集之sentry教程详解
2019/05/27 Javascript
Javascript中的this,bind和that使用实例
2019/12/05 Javascript
使用preload预加载页面资源时注意事项
2020/02/03 Javascript
vue实现瀑布流组件滑动加载更多
2020/03/10 Javascript
vue在App.vue文件中监听路由变化刷新页面操作
2020/08/14 Javascript
element-ui 弹窗组件封装的步骤
2021/01/22 Javascript
Python 文件读写操作实例详解
2014/03/12 Python
Python实现KNN邻近算法
2021/01/28 Python
python使用tensorflow深度学习识别验证码
2018/04/03 Python
基于python历史天气采集的分析
2019/02/14 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
2020/02/11 Python
selenium+python配置chrome浏览器的选项的实现
2020/03/18 Python
10行Python代码实现Web自动化管控的示例代码
2020/08/14 Python
CSS3颜色值RGBA与渐变色使用介绍
2020/03/06 HTML / CSS
澳大利亚票务和娱乐市场领导者:Ticketmaster
2017/03/03 全球购物
自我评价范文
2013/12/22 职场文书
供应链金融服务方案
2014/05/25 职场文书
少年犯观后感
2015/06/11 职场文书
2016教师政治学习心得体会
2016/01/23 职场文书
争做文明公民倡议书
2019/06/24 职场文书
小程序实现筛子抽奖
2021/05/26 Javascript
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
2021/06/08 Python
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android
vue实现列表拖拽排序的示例代码
2022/04/08 Vue.js