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 相关文章推荐
搜索引擎技术核心揭密
Oct 09 PHP
php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
Aug 21 PHP
php 文件上传类代码
Aug 06 PHP
PHP中操作ini配置文件的方法
Apr 25 PHP
如何设置mysql允许外网访问
Jun 04 PHP
PHP中比较时间大小实例
Aug 21 PHP
php中opendir函数用法实例
Nov 15 PHP
PHP获取数组的键与值方法小结
Jun 13 PHP
thinkPHP5.0框架API优化后的友好性分析
Mar 17 PHP
php如何计算两坐标点之间的距离
Dec 29 PHP
PHP写API输出的时用echo的原因详解
Apr 28 PHP
php实现登录页面的简单实例
Sep 29 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导出Excel的小经验 完美解决乱码问题
2013/06/10 PHP
windows7下php开发环境搭建图文教程
2015/01/06 PHP
php 读取输出其他文件的实现方法
2016/07/26 PHP
php常用字符串String函数实例总结【转换,替换,计算,截取,加密】
2016/12/07 PHP
jquery 插件实现图片延迟加载效果代码
2010/02/06 Javascript
JavaScript对象链式操作代码(jquery)
2010/07/04 Javascript
动态的改变IFrame的高度实现IFrame自动伸展适应高度
2012/12/28 Javascript
javascript学习笔记(七)Ajax和Http状态码
2014/10/08 Javascript
JavaScript实现点击文字切换登录窗口的方法
2015/05/11 Javascript
每天一篇javascript学习小结(String对象)
2015/11/18 Javascript
JQuery EasyUI的使用
2016/02/24 Javascript
关于使用axios的一些心得技巧分享
2017/07/02 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
JS 实现微信扫一扫功能
2018/09/14 Javascript
小程序实现日历左右滑动效果
2019/10/21 Javascript
jquery实现垂直手风琴导航栏
2020/02/18 jQuery
webpack+vue.js构建前端工程化的详细教程
2020/05/10 Javascript
Linux下用Python脚本监控目录变化代码分享
2015/05/21 Python
Python网络爬虫出现乱码问题的解决方法
2017/01/05 Python
基于Django框架利用Ajax实现点赞功能实例代码
2018/08/19 Python
python binascii 进制转换实例
2019/06/12 Python
python 中的列表生成式、生成器表达式、模块导入
2019/06/19 Python
解析PyCharm Python运行权限问题
2020/01/08 Python
简单了解python关键字global nonlocal区别
2020/09/21 Python
python中用Scrapy实现定时爬虫的实例讲解
2021/01/18 Python
通过css3动画和opacity透明度实现呼吸灯效果
2019/08/09 HTML / CSS
h5使用canvas画布实现手势解锁
2019/01/04 HTML / CSS
canvas 基础之图像处理的使用
2020/04/10 HTML / CSS
Betsey Johnson官网:妖娆可爱的连衣裙及鞋子、手袋和配件
2016/12/30 全球购物
碧欧泉Biotherm加拿大官方网站:法国高端护肤品牌
2019/10/18 全球购物
11月红领巾广播稿
2014/01/17 职场文书
2015年食品安全宣传周活动总结
2015/07/09 职场文书
Python 文本滚动播放器的实现代码
2021/04/25 Python
基于flask实现五子棋小游戏
2021/05/25 Python
如何打开Win11系统注册表编辑器?Win11注册表编辑器打开修复方法
2022/04/05 数码科技
Python基本知识点总结
2022/04/07 Python