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静态类
Nov 25 PHP
常用的php对象类型判断
Aug 27 PHP
ubuntu10.04配置 nginx+php-fpm模式的详解
Jun 03 PHP
深入PHP获取随机数字和字母的方法详解
Jun 06 PHP
PHP输出两个数字中间有多少个回文数的方法
Mar 23 PHP
使用PHP如何实现高效安全的ftp服务器(二)
Dec 30 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
May 09 PHP
示例详解Laravel重置密码代码重构
Aug 10 PHP
php PDO属性设置与操作方法分析
Dec 27 PHP
实例讲解PHP中使用命名空间
Jan 27 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
Mar 12 PHP
PHP pthreads v3下worker和pool的使用方法示例
Feb 21 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 出现乱码和Sessions验证问题的解决方法!
2008/12/06 PHP
Discuz!X中SESSION机制实例详解
2015/09/23 PHP
实例分析PHP中PHPMailer发邮件
2017/12/13 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
2020/11/27 PHP
checkbox全选/取消全选以及checkbox遍历jQuery实现代码
2009/12/02 Javascript
关于event.cancelBubble和event.stopPropagation()的区别介绍
2011/12/11 Javascript
javascript生成json数据简单示例分享
2014/02/14 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
2014/10/17 Javascript
JavaScript实现快速排序的方法
2015/07/31 Javascript
适用于javascript开发者的Processing.js入门教程
2016/02/24 Javascript
JavaScript中闭包之浅析解读(必看篇)
2016/08/25 Javascript
vue制作加载更多功能的正确打开方式
2016/10/12 Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
2016/12/08 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
基于mpvue的小程序项目搭建的步骤
2018/05/22 Javascript
基于Vue实现微信小程序的图文编辑器
2018/07/25 Javascript
Nodejs把接收图片base64格式保存为文件存储到服务器上
2018/09/26 NodeJs
vue使用video插件vue-video-player详解
2020/10/23 Javascript
mapboxgl实现带箭头轨迹线的代码
2021/01/04 Javascript
[54:17]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第二场 1月10日
2021/03/11 DOTA
python学习 流程控制语句详解
2016/06/01 Python
python 生成器生成杨辉三角的方法(必看)
2017/04/10 Python
基于django channel实现websocket的聊天室的方法示例
2019/04/11 Python
PowerBI和Python关于数据分析的对比
2019/07/11 Python
python安装scipy的步骤解析
2019/09/28 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
2020/09/23 Python
Sperry澳大利亚官网:源自美国帆船鞋创始品牌
2019/07/29 全球购物
Cynthia Rowley官网:全球领先的生活方式品牌
2020/10/27 全球购物
俄罗斯首家面向中国消费者的一站式购物网站:Wruru
2020/05/08 全球购物
给老师的道歉信
2014/01/11 职场文书
商业项目策划方案
2014/06/05 职场文书
个人查摆问题自查报告
2014/10/16 职场文书
2015年社区教育工作总结
2015/05/13 职场文书
学校趣味运动会开幕词
2016/03/04 职场文书
Python字典和列表性能之间的比较
2021/06/07 Python
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
2021/11/01 MongoDB