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&mysql(四)
Oct 09 PHP
php 获取百度的热词数据的代码
Feb 18 PHP
php获取服务器信息的实现代码
Feb 04 PHP
8个PHP程序员常用的功能汇总
Dec 18 PHP
Codeigniter实现发送带附件的邮件
Mar 19 PHP
php实现专业获取网站SEO信息类实例
Apr 02 PHP
ThinkPHP的常用配置选项汇总
Mar 24 PHP
CI分页类首页、尾页不显示的解决方法
Mar 28 PHP
PHP扩展框架之Yaf框架的安装与使用
May 18 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
Nov 17 PHP
浅析PHP7 的垃圾回收机制
Sep 06 PHP
php+js实现点赞功能的示例详解
Aug 07 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 Memcached + APC + 文件缓存封装实现代码
2010/03/11 PHP
php的chr和ord函数实现字符加减乘除运算实现代码
2011/12/05 PHP
php中选择什么接口(mysql、mysqli)访问mysql
2013/02/06 PHP
详解PHP导入导出CSV文件
2014/11/03 PHP
一个经典的PHP文件上传类分享
2014/11/18 PHP
php上传excel表格并获取数据
2017/04/27 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/02/09 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
jQuery让控件左右移动的三种实现方法
2013/09/08 Javascript
jquery简单实现鼠标经过导航条改变背景图
2013/12/17 Javascript
JavaScript使用setInterval()函数实现简单轮询操作的方法
2015/02/02 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
2016/05/12 Javascript
javascript中href和replace的比较(详解)
2016/11/25 Javascript
微信小程序调用PHP后台接口 解析纯html文本
2017/06/13 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
2017/06/17 Javascript
echart简介_动力节点Java学院整理
2017/08/11 Javascript
JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】
2019/02/22 Javascript
jQuery 选择器用法实例分析【prev + next】
2020/05/22 jQuery
Python删除指定目录下过期文件的2个脚本分享
2014/04/10 Python
Python中pygame安装方法图文详解
2015/11/11 Python
python程序变成软件的实操方法
2019/06/24 Python
django-filter和普通查询的例子
2019/08/12 Python
python打开使用的方法
2019/09/30 Python
纯css实现照片墙3D效果的示例代码
2017/11/13 HTML / CSS
美国在线工具商店:Acme Tools
2018/06/26 全球购物
管理部部长岗位职责
2013/12/05 职场文书
杠杆的科学教学反思
2014/01/10 职场文书
中央空调节能方案
2014/06/15 职场文书
就业协议书怎么填
2014/09/15 职场文书
夫妻婚内购房协议书
2014/10/05 职场文书
三严三实学习心得体会(精选N篇)
2016/01/05 职场文书
Vue通过懒加载提升页面响应速度
2021/05/10 Vue.js
变长双向rnn的正确使用姿势教学
2021/05/31 Python
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL
Golang Web 框架Iris安装部署
2022/08/14 Python