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创建PDF中文文档
Oct 09 PHP
PHP 存取 MySQL 数据库的一个例子
Oct 09 PHP
快速配置PHPMyAdmin方法
Jun 05 PHP
用PHP读取RSS feed的代码
Aug 01 PHP
PHP程序级守护进程的实现与优化的使用概述
May 02 PHP
thinkphp中字符截取函数msubstr()用法分析
Jan 09 PHP
详谈phpAdmin修改密码后拒绝访问的问题
Apr 03 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
php递归函数怎么用才有效
Feb 24 PHP
PHP设计模式之模板方法模式定义与用法详解
Apr 02 PHP
PHP-FPM 的管理和配置详解
Feb 17 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
Feb 27 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
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
php url路由入门实例
2014/04/23 PHP
PHP判断一个gif图片是否为动态图片的方法
2014/11/19 PHP
javascript编程起步(第六课)
2007/01/10 Javascript
jQuery 验证插件 Web前端设计模式(asp.net)
2010/10/17 Javascript
Extjs中的GridPanel隐藏列会显示在menuDisabled中解决方法
2013/01/27 Javascript
jQuery 属性选择器element[herf*='value']使用示例
2013/10/20 Javascript
jQuery中find()方法用法实例
2015/01/07 Javascript
仿JQuery输写高效JSLite代码的一些技巧
2015/01/13 Javascript
简述JavaScript提交表单的方式 (Using JavaScript Submit Form)
2016/03/18 Javascript
jQuery弹出遮罩层效果完整示例
2016/09/13 Javascript
微信小程序 css使用技巧总结
2017/01/09 Javascript
浅谈Angular.js中使用$watch监听模型变化
2017/01/10 Javascript
js生成随机数方法和实例
2017/01/17 Javascript
H5上传本地图片并预览功能
2017/05/08 Javascript
微信小程序 蓝牙的实现实例代码
2017/06/27 Javascript
vue生成token保存在客户端localStorage中的方法
2017/10/25 Javascript
JavaScript中break、continue和return的用法区别实例分析
2020/03/02 Javascript
[01:42]DOTA2 – 虚无之灵
2019/08/25 DOTA
python中使用OpenCV进行人脸检测的例子
2014/04/18 Python
Cpy和Python的效率对比
2015/03/20 Python
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
python库lxml在linux和WIN系统下的安装
2018/06/24 Python
Python 脚本拉取 Docker 镜像问题
2019/11/10 Python
python实现视频压缩功能
2020/12/18 Python
领先的英国注册在线药房 :Simply Meds Online
2019/03/28 全球购物
全球最大的瓷器、水晶和银器零售商:Replacements
2020/06/15 全球购物
数百万免费的图形资源:Freepik
2020/09/21 全球购物
化学相关工作求职信
2013/10/02 职场文书
小学三年级数学教学反思
2014/01/31 职场文书
产品售后服务承诺书
2014/05/21 职场文书
夏季药店促销方案
2014/08/22 职场文书
庆祝新中国成立65周年“向国旗敬礼”网上签名寄语
2014/09/27 职场文书
泸县召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
2015年初中元旦晚会活动总结
2014/11/28 职场文书
经费申请报告范文
2015/05/18 职场文书