概述

使用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数组去重相关推荐

  1. php array 数组去重,更快的方式实现 PHP 数组去重

    如何学习PHP array_flip()定义和用法 array_flip() 函数返回一个反转后的数组,如果同一值出现了多次,则最后一个键名将作为它的值,所有其他的键名都将丢失. 如果原数组中的值的数 ...

  2. C语言 二维数组作为函数参数的4种方式

    前言 多维数组中,二维数组是最常用的一种.在C语言编程中,二维数组的定义.取值以及赋值都比较容易,与一维数组类似.然而,在将二维数组作为函数参数传递时,参数结构较复杂,难以理解.本文章是实用型文章,注 ...

  3. 运动基元_Java更快地对基元数组进行排序?

    运动基元 看来,在不久的将来,Java中的原语排序数组可能会提高性能. 弗拉基米尔·雅罗斯拉夫斯基(Vladimir Yaroslavskiy)已在core-libs-dev邮件列表中发布了一条消息 ...

  4. Java更快地对基元数组进行排序?

    看起来Java的原语排序数组在不久的将来可能会提高性能. 弗拉基米尔·雅罗斯拉夫斯基(Vladimir Yaroslavskiy)已在core-libs-dev邮件列表中发布了一条消息 ,标题为&qu ...

  5. matlab 空矩阵耗时,性能 – 更快的方式通过空矩阵乘法初始化数组? (Matlab)

    这很奇怪,我看到f更快,而g比你看到的慢.但是他们对我来说都是一样的.也许不同版本的MATLAB? >> g = @() zeros(1000, 0) * zeros(0, 1000); ...

  6. python列表去重函数_对python中两种列表元素去重函数性能的比较方法

    测试函数: 第一种:list的set函数 第二种:{}.fromkeys().keys() 测试代码: #!/usr/bin/python #-*- coding:utf-8 -*- import t ...

  7. python数组求和函数_python数据分析之Numpy数据库第三期数组的运算

    上期数组的索引和切片的知识总结通道:数组的索引和切片 数组和标量间的运算 数组之所以强大而且重要的原因,是其不需要通过循环就可以完成批量计算,也就是矢量化 import numpy as np a = ...

  8. 一维数组和二位数组作为函数参数进行传递的方式

    数组作为参数形式进行传递其实是指针作为函数参数的一种具体表现形式, 才得以在函数中改变原来的数值,函数结束后,任然生效 普通变量作为函数参数实现是数值传递,而指针变量作为函数参数传递实现的是地址的传递 ...

  9. 二维数组作为函数参数传递的三种方式

    指针 1.形参声明为二维数组 2.形参声明为一级指针 3.形参声明为二级指针 指针 关于指针的介绍和基础应用推荐一位B站up主的视频 [C指针]十分钟.你要是听不懂.我当场就把这个编译器- 1.形参声 ...

最新文章

  1. sde java_arcgis SDE for Java
  2. ZooKeeper官方文档学习笔记01-zookeeper概述
  3. 满满的干货!mysql技术介绍
  4. javascript arguments对象研究--针对jquery源码研究再研究
  5. java获得当前路径_JAVA 取得当前目录的路径/Servlet/class/文件路径/web路径/url地址...
  6. Python实现聚类 KMeans算法
  7. STM32智能锁指纹锁密码锁WIFI远程开锁微信小程序临时密码源码PCBA方案
  8. truecrypt使用教程_如何使用TrueCrypt保护您的闪存驱动器数据
  9. 20190729杭电多校第三场
  10. ih5连接mysql数据库_iH5高级教程:H5数据应用,多种数据的判断
  11. iClone走路改为原地踏步
  12. ui标注android ios,IOS+ANDROID的UI切图与标注方法
  13. 索尼发布新Bravia液晶电视 84英寸4K分辨率!
  14. php项目部署在腾讯云服务器,腾讯云服务器部署
  15. 数字图像处理-常考算法代码-详细注释
  16. 安全人员常用的python库
  17. 30天自制操作系统:第一天
  18. 《Lynda.com XML 必备教程》(Lynda.com XML Essential Training)CFE 教程
  19. Smart3D将已经生成的OSGB格式的模型转换成S3C格式
  20. dayjs 取本周时间段

热门文章

  1. VirtuaNES.v0.97源码探究2 图形查看器
  2. ofo及创始人戴威被列入“老赖”名单 不能买房买车旅游
  3. cisco 华三 对接_H3C S5500与思科3750对接二层链路聚合的典型组网配置案例
  4. 读书笔记-精准努力-自信与自卑
  5. #力扣 LeetCode LCP 02. 分式化简 @FDDLC
  6. CF223B Two Strings
  7. 用C语言实现推箱子小游戏基础程序plus
  8. 基于Linux系统的C语言多关卡推箱子设计
  9. 名片OCR自动识别管理软件
  10. valgrind 工具介绍和简单的使用