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制作图型计数器的例子
Oct 09 PHP
php session应用实例 登录验证
Mar 16 PHP
PHP检测字符串是否为UTF8编码的常用方法
Nov 21 PHP
php+ajax实现文章自动保存的方法
Dec 30 PHP
PHP安全上传图片的方法
Mar 21 PHP
PHP实现图片自动清理的方法
Jul 08 PHP
PHP几个实用自定义函数小结
Jan 25 PHP
PHP中大括号'{}'用法实例总结
Feb 08 PHP
php图片合成方法(多张图片合成一张)
Nov 25 PHP
php strftime函数的详细用法
Jun 21 PHP
java解析json方法总结
May 16 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 HTML代码串截取代码
2008/12/29 PHP
php自定义错误处理用法实例
2015/03/20 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
PHP实现的日历功能示例
2018/09/01 PHP
php+websocket 实现的聊天室功能详解
2020/05/27 PHP
Prototype使用指南之base.js
2007/01/10 Javascript
javascript之函数直接量(function(){})()
2007/06/29 Javascript
javascript replace方法与正则表达式
2008/02/19 Javascript
JQuery 表单中textarea字数限制实现代码
2009/12/07 Javascript
JsDom 编程小结
2011/08/09 Javascript
让图片旋转任意角度及JQuery插件使用介绍
2013/03/20 Javascript
JQuery实现简单的服务器轮询效果实例
2016/03/31 Javascript
Vue实现双向绑定的方法
2016/12/22 Javascript
nodejs的压缩文件模块archiver用法示例
2017/01/18 NodeJs
老生常谈javascript的面向对象思想
2017/08/22 Javascript
详解javascript 正则表达式之分组与前瞻匹配
2018/05/30 Javascript
基于vue实现一个禅道主页拖拽效果
2019/05/27 Javascript
vue如何实现自定义底部菜单栏
2019/07/01 Javascript
JavaScript面向对象中接口实现方法详解
2019/07/24 Javascript
Python备份Mysql脚本
2008/08/11 Python
Python实现把utf-8格式的文件转换成gbk格式的文件
2015/01/22 Python
用Python配平化学方程式的方法
2019/07/20 Python
Python中filter与lambda的结合使用详解
2019/12/24 Python
Python序列化pickle模块使用详解
2020/03/05 Python
Python selenium键盘鼠标事件实现过程详解
2020/07/28 Python
利用Python批量识别电子账单数据的方法
2021/02/08 Python
css 元素选择器的简单实例
2016/05/23 HTML / CSS
室内设计实习自我鉴定
2013/09/25 职场文书
求职信的七个关键技巧
2014/02/05 职场文书
《钱学森》听课反思
2014/03/01 职场文书
2014年3.15团委活动总结
2014/03/16 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
单位一把手群众路线四风问题整改措施
2014/09/25 职场文书
统计工作个人总结
2015/03/03 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书
MySQL之PXC集群搭建的方法步骤
2021/05/25 MySQL