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调用三种数据库的方法(3)
Oct 09 PHP
PHP 字符串 小常识
Jun 05 PHP
PHP has encountered an Access Violation 错误的解决方法
Jan 17 PHP
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
Jun 01 PHP
php使用指定编码导出mysql数据到csv文件的方法
Mar 31 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
Mar 19 PHP
Yii2简单实现给表单添加验证码的方法
Jul 18 PHP
PHP的mysqli_rollback()函数讲解
Jan 23 PHP
PHP中$GLOBALS与global的区别详解
Mar 21 PHP
在phpstudy集成环境下的nginx服务器下配置url重写
Dec 02 PHP
laravel框架创建授权策略实例分析
Nov 22 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
Jan 23 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中读取文件的8种方法和代码实例
2014/08/05 PHP
php无限极分类递归排序实现方法
2014/11/11 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
2016/01/11 PHP
在IIS下安装PHP扩展的方法(超简单)
2017/04/10 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
javascript 读取xml,写入xml 实现代码
2009/07/10 Javascript
Ruffy javascript 学习笔记
2009/11/30 Javascript
boxy基于jquery的弹出层对话框插件扩展应用 弹出层选择器
2010/11/21 Javascript
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行
2013/07/09 Javascript
通过$(this)使用jQuery包装后的方法或属性
2014/05/18 Javascript
初识angular框架后的所思所想
2016/02/19 Javascript
javascript 解决浏览器不支持的问题
2016/09/24 Javascript
通过Ajax使用FormData对象无刷新上传文件方法
2016/12/08 Javascript
如何使用JS在HTML中自定义字符串格式化
2017/07/20 Javascript
JS+HTML实现的圆形可点击区域示例【3种方法】
2018/08/01 Javascript
vue加载完成后的回调函数方法
2018/09/07 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
Vue.js数字输入框组件使用方法详解
2019/10/19 Javascript
Vue事件处理原理及过程详解
2020/03/11 Javascript
使用JavaScript获取扫码枪扫描得到的条形码的思路代码详解
2020/06/10 Javascript
Python中zip()函数用法实例教程
2014/07/31 Python
[原创]教女朋友学Python(一)运行环境搭建
2017/11/29 Python
Django实战之用户认证(用户登录与注销)
2018/07/16 Python
Centos下实现安装Python3.6和Python2共存
2018/08/15 Python
python多线程同步之文件读写控制
2021/02/25 Python
使用python去除图片白色像素的实例
2019/12/12 Python
python实现简单井字棋小游戏
2020/03/05 Python
html5 http的轮询和Websocket原理
2018/10/19 HTML / CSS
保加利亚运动鞋购物网站:SneakerStudio.bg
2020/12/23 全球购物
技术总监管理职责范本
2014/03/06 职场文书
创建卫生先进单位实施方案
2014/03/10 职场文书
2014年全国法制宣传日宣传活动方案
2014/11/02 职场文书
岗位职责范本大全
2015/02/26 职场文书
2015年售后服务工作总结
2015/04/25 职场文书
django如何自定义manage.py管理命令
2021/04/27 Python
Spring中bean集合注入的方法详解
2022/07/07 Java/Android