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版(2)
Oct 09 PHP
phpmyadmin 3.4 空密码登录的实现方法
May 29 PHP
setcookie中Cannot modify header information-headers already sent by错误的解决方法详解
May 08 PHP
PHP 异步执行方法,模拟多线程的应用分析
Jun 03 PHP
PHP制作图形验证码代码分享
Oct 23 PHP
Thinkphp3.2.3分页使用实例解析
Jul 28 PHP
php操作xml并将其插入数据库的实现方法
Sep 08 PHP
thinkPHP自动验证、自动添加及表单错误问题分析
Oct 17 PHP
Yii遍历行下每列数据的方法
Oct 17 PHP
PDO操作MySQL的基础教程(推荐)
Aug 18 PHP
浅谈PHP无限极分类原理
Mar 14 PHP
PHPStorm2020.1永久激活及下载更新至2020(推荐)
Sep 25 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
十大催泪虐心动漫电影,有几部你还没看
2020/03/04 日漫
将php数组输出html表格的方法
2014/02/24 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
thinkphp3.x中变量的获取和过滤方法详解
2016/05/20 PHP
将jQuery应用于login页面的问题及解决
2009/10/17 Javascript
js 实现复制到粘贴板的功能代码
2010/05/13 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
2015/04/22 Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
2015/06/18 Javascript
AngularJS模块详解及示例代码
2016/08/17 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
详解Vue.js——60分钟组件快速入门(上篇)
2016/12/05 Javascript
canvas实现图片根据滑块放大缩小效果
2017/02/24 Javascript
解决vue中无法动态修改jqgrid组件 url地址的问题
2018/03/01 Javascript
vue+iview+less 实现换肤功能
2018/08/17 Javascript
Vue弹出菜单功能的实现代码
2018/09/12 Javascript
vue使用laydate时间插件的方法
2018/11/14 Javascript
jquery-ui 进度条功能示例【测试可用】
2019/07/25 jQuery
Vuex实现数据共享的方法
2019/12/20 Javascript
微信小程序实现选择地址省市区三级联动
2020/06/21 Javascript
javascript实现移动端触屏拖拽功能
2020/07/29 Javascript
浅谈vue在html中出现{{}}的原因及解决方式
2020/11/16 Javascript
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
2018/02/18 Python
让Django支持Sql Server作后端数据库的方法
2018/05/29 Python
python dict 相同key 合并value的实例
2019/01/21 Python
对python中的try、except、finally 执行顺序详解
2019/02/18 Python
Python3 pickle对象串行化代码实例解析
2020/03/23 Python
python中的yield from语法快速学习
2020/11/06 Python
python实现经纬度采样的示例代码
2020/12/10 Python
linux面试题参考答案(10)
2013/11/04 面试题
毕业生就业自荐信
2013/12/04 职场文书
洗煤厂厂长岗位职责
2014/01/03 职场文书
《两只鸟蛋》教学反思
2014/02/10 职场文书
万年牢教学反思
2014/02/15 职场文书
公安四风对照检查材料思想汇报
2014/10/11 职场文书
想要创业,那么你做好准备了吗?
2019/07/01 职场文书
详解Vue项目的打包方式(生成dist文件)
2022/01/18 Vue.js