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 MSSQL 存储过程的方法
Dec 24 PHP
PHP 变量定义和变量替换的方法
Jul 30 PHP
PHP最常用的ini函数分析 针对PHP.ini配置文件
Apr 22 PHP
PHP逐行输出(ob_flush与flush的组合)
Feb 04 PHP
PHP乱码问题,UTF-8乱码常见问题小结
Apr 09 PHP
php 解压rar文件及zip文件的方法
May 05 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
May 10 PHP
PHP比你想象的好得多
Nov 27 PHP
PHP生成静态HTML页面最简单方法示例
Apr 09 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
Aug 27 PHP
简单了解WordPress开发中update_option()函数的用法
Jan 11 PHP
PHP中PCRE正则解析代码详解
Apr 26 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
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
2006/07/09 PHP
PHP新手上路(十)
2006/10/09 PHP
php mssql 分页SQL语句优化 持续影响
2009/04/26 PHP
关于crontab的使用详解
2013/06/24 PHP
PHP面相对象中的重载与重写
2017/02/13 PHP
PHP代码重构方法漫谈
2018/04/17 PHP
PHP+jQuery实现双击修改table表格功能示例
2019/02/21 PHP
PHP队列场景以及实现代码实例详解
2021/02/26 PHP
JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
2013/01/23 Javascript
jQuery实现响应鼠标背景变化的动态菜单效果代码
2015/08/27 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
2016/09/19 Javascript
canvas绘制表盘时钟
2017/01/23 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
微信jssdk踩坑之签名错误invalid signature
2020/05/19 Javascript
通过vue.extend实现消息提示弹框的方法记录
2021/01/07 Vue.js
Python中Continue语句的用法的举例详解
2015/05/14 Python
django批量导入xml数据
2016/10/16 Python
Python sklearn KFold 生成交叉验证数据集的方法
2018/12/11 Python
python 对多个csv文件分别进行处理的方法
2019/01/07 Python
基于python实现学生信息管理系统
2019/11/22 Python
spyder 在控制台(console)执行python文件,debug python程序方式
2020/04/20 Python
Python性能测试工具Locust安装及使用
2020/12/01 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
2021/01/29 Python
马来西亚航空官方网站:Malaysia Airlines
2017/07/28 全球购物
最新的小工具和卓越的产品设计:Oh That Tech!
2019/08/07 全球购物
土木工程实习生自我鉴定
2013/09/19 职场文书
车辆安全检查制度
2014/01/12 职场文书
毕业生写求职信的要点
2014/03/04 职场文书
珍爱生命演讲稿
2014/05/10 职场文书
关于工作时间玩手机的检讨书
2014/09/18 职场文书
依法行政工作汇报材料
2014/10/28 职场文书
2014年城管个人工作总结
2014/12/08 职场文书
英文邀请函
2015/02/02 职场文书
党员反四风学习心得体会
2016/01/22 职场文书
2019年大学生暑期社会实践调查报告模板
2019/11/07 职场文书