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


Posted in PHP onMay 09, 2018

本文实例讲述了PHP数组去重的更快实现方式。分享给大家供大家参考,具体如下:

概述

使用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);
print_r($array)

运行结果:

Array
(
  [0] => green
  [3] => blue
  [2] => orange
)

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

使用array_merge修复数组的keys

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

PHP代码:

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

运行结果同上

第二种方式,使用array_keys

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

PHP代码:

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

运行结果同上

结论

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

PS:本站还有两款比较简单实用的在线文本去重复工具,推荐给大家使用:

在线去除重复项工具:
http://tools.3water.com/code/quchong

在线文本去重复工具:
http://tools.3water.com/aideddesign/txt_quchong

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
如何从一个php文件向另一个地址post数据,不用表单和隐藏的变量的
Mar 06 PHP
PHP中for循环语句的几种变型
Mar 16 PHP
PHP __autoload()方法真的影响性能吗?
Mar 30 PHP
基于PHP编程注意事项的小结
Apr 27 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
May 08 PHP
PHP实现合并discuz用户
Aug 05 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
Dec 17 PHP
php获取文件后缀的9种方法
Mar 22 PHP
浅析Yii2集成富文本编辑器redactor实例教程
Apr 25 PHP
php微信开发之关键词回复功能
Jun 13 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
Apr 04 PHP
PHP连接SQL server数据库测试脚本运行实例
Aug 24 PHP
PHP+MySQL实现消息队列的方法分析
May 09 #PHP
PHP共享内存使用与信号控制实例分析
May 09 #PHP
php curl批处理实现可控并发异步操作示例
May 09 #PHP
php使用curl伪造来源ip和refer的方法示例
May 08 #PHP
PHP+ajax实现获取新闻数据简单示例
May 08 #PHP
PHP 计算两个特别大的整数实例代码
May 07 #PHP
详解PHP发送邮件知识点
May 06 #PHP
You might like
采用PHP函数memory_get_usage获取PHP内存清耗量的方法
2011/12/06 PHP
MyEclipse常用配置图文教程
2014/09/11 PHP
PHP版本常用的排序算法汇总
2015/12/20 PHP
CodeIgniter配置之routes.php用法实例分析
2016/01/19 PHP
代码生成器 document.write()
2007/04/15 Javascript
node.js中的fs.truncate方法使用说明
2014/12/15 Javascript
jQuery实现数秒后自动提交form的方法
2015/03/05 Javascript
手机端转盘抽奖代码分享
2015/09/10 Javascript
Bootstrap学习笔记之css组件(3)
2016/06/07 Javascript
JavaScript事件学习小结(三)js事件对象
2016/06/09 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
BootStrap Fileinput上传插件使用实例代码
2017/07/28 Javascript
谈谈VUE种methods watch和compute的区别和联系
2017/08/01 Javascript
node 利用进程通信实现Cluster共享内存
2017/10/27 Javascript
mpvue性能优化实战技巧(小结)
2019/04/17 Javascript
微信小程序导航栏跟随滑动效果的实现代码
2019/05/14 Javascript
js实现无缝轮播图效果
2020/03/09 Javascript
[58:15]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 NB vs Liquid
2018/04/02 DOTA
剖析Django中模版标签的解析与参数传递
2015/07/21 Python
利用 python 对目录下的文件进行过滤删除
2017/12/27 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
2019/07/15 Python
Python 实现Numpy中找出array中最大值所对应的行和列
2019/11/26 Python
python中for in的用法详解
2020/04/17 Python
python3爬虫中异步协程的用法
2020/07/10 Python
详解Pycharm与anaconda安装配置指南
2020/08/25 Python
python判断字符串以什么结尾的实例方法
2020/09/18 Python
CSS3 calc()会计算属性详解
2018/02/27 HTML / CSS
意大利制造的男鞋和女鞋:SCAROSSO
2018/03/07 全球购物
微软马来西亚官方网站:Microsoft马来西亚
2019/11/22 全球购物
幼儿园教师辞职信
2014/01/18 职场文书
《掌声》教学反思
2014/02/23 职场文书
英语课外活动总结
2014/08/27 职场文书
催款通知书范文
2015/04/17 职场文书
2015年安全生产管理工作总结
2015/05/25 职场文书
祝福语集锦:送给毕业同学祝福语
2019/11/21 职场文书
Python 数据可视化之Seaborn详解
2021/11/02 Python