PHP数组去重比较快的实现方式


Posted in PHP onJanuary 19, 2016

概述

使用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);

因为我们已经移除了一些元素,因此数组看起来不是正常的序列。比如我们可能会得到:array(0=>'A',2=>'B',5=>'C');。在某些情况下,这不是一个问题,但是如果你需要数组的键值保持数字的序列,你可以使用一到两种方法解决键值乱序的问题。

使用array_merge修复数组的keys

添加array_flip之后的函数,将会对数组的键值排序并且让它们恢复到正常的序列,如:0,1,2,3…

$array = array('green','blue','orange','blue');
$array = array_flip($array);
$array = array_flip($array);
/* 使用array_merge()函数修复键值*/
$array = array_merge($array); 
 

第二种方式,使用array_keys

注意,这种修复数组键值的方法比使用array_merge()函数稍微快了一点。你也可以在最后一步结合使用array_keys()函数(此函数返回翻转后的值)。然后当你翻转数组的值,键值就会根据顺序创建。

$array = array('green','blue','orange','blue');
$array = array_flip($array);
/* 跟第一个例子一样,但是现在我们先提取数组的键值 */
$array = array_keys($array);

结论

非常简单,比起在大数组使用array_unique函数,有了一个有效的性能提升。

PHP 相关文章推荐
php之对抗Web扫描器的脚本技巧
Oct 01 PHP
PHP 数组教程 定义数组
Oct 23 PHP
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
Jul 29 PHP
ThinkPHP模板Switch标签用法示例
Jun 30 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
Nov 18 PHP
php取得字符串首字母的方法
Mar 25 PHP
Laravel 中获取上一篇和下一篇数据
Jul 27 PHP
Yii2创建表单(ActiveForm)方法详解
Jul 23 PHP
Yii2框架数据验证操作实例详解
May 02 PHP
php数组遍历类与用法示例
May 24 PHP
laravel实现于语言包的完美切换方法
Sep 29 PHP
php面试实现反射注入的详细方法
Sep 30 PHP
PHP保存session到memcache服务器的方法
Jan 19 #PHP
PHP mysql事务问题实例分析
Jan 18 #PHP
给PHP开发者的编程指南 第一部分降低复杂程度
Jan 18 #PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
Jan 15 #PHP
php实现的操作excel类详解
Jan 15 #PHP
php实现的xml操作类
Jan 15 #PHP
PHP基于单例模式实现的数据库操作基类
Jan 15 #PHP
You might like
php使用curl并发减少后端访问时间的方法分析
2016/05/12 PHP
微信支付开发发货通知实例
2016/07/12 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
2016/09/19 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
PHP 断点续传实例详解
2017/11/11 PHP
在Laravel中实现使用AJAX动态刷新部分页面
2019/10/15 PHP
tp5.1 实现setInc字段自动加1
2019/10/18 PHP
JS中三目运算符和if else的区别分析与示例
2014/11/21 Javascript
JQuery为元素添加样式的实现方法
2016/07/20 Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
2016/10/30 Javascript
JavaScript递归操作实例浅析
2016/10/31 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
2017/03/08 Javascript
D3.js进阶系列之CSV表格文件的读取详解
2017/06/06 Javascript
微信小程序--组件(swiper)详细介绍
2017/06/13 Javascript
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
基于jQuery中ajax的相关方法汇总(必看篇)
2017/11/08 jQuery
Vue slot用法(小结)
2018/10/22 Javascript
layui--js控制switch的切换方法
2019/09/03 Javascript
vue实现整屏滚动切换
2020/06/29 Javascript
python使用calendar输出指定年份全年日历的方法
2015/04/04 Python
详解Python如何获取列表(List)的中位数
2016/08/12 Python
python实现随机梯度下降(SGD)
2020/03/24 Python
基于Python实现的微信好友数据分析
2018/02/26 Python
对Python字符串中的换行符和制表符介绍
2018/05/03 Python
Python使用combinations实现排列组合的方法
2018/11/13 Python
详解重置Django migration的常见方式
2019/02/15 Python
图文详解Django使用Pycharm连接MySQL数据库
2019/08/09 Python
Django路由层URLconf作用及原理解析
2020/09/24 Python
拾金不昧表扬信范文
2014/01/11 职场文书
大堂副理的岗位职责范文
2014/02/17 职场文书
创建绿色社区汇报材料
2014/08/22 职场文书
乡镇干部个人对照检查材料思想汇报(原创篇)
2014/09/28 职场文书
个人学习党的群众路线教育实践活动心得体会
2014/11/05 职场文书
谁动了我的奶酪读书笔记
2015/06/30 职场文书
小学音乐课歌曲《堆雪人》教学反思
2016/02/18 职场文书
导游词之苏州盘门景区
2019/11/12 职场文书