概述

使用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. 开发日记-20190501 关键词 汇编语言(启动) 基于x86处理器
  2. ubuntu9.10中更改启动顺序(grub2的配置)
  3. 如何检测ARP病毒,arp病毒怎么解决?
  4. linux之tr命令使用和总结
  5. 最早的算法可追溯到三千年前,“所谓的 AI 并非源自先进的技术”!
  6. 探讨【IGE】的源代码【五】。
  7. 基于java的网络电子通讯录的设计_网络电子通讯录管理系统
  8. Oracle 同义词,赋权语句图解记录
  9. 使用超链接实现企业QQ在线客服
  10. PMP思维导图—项目经理的角色
  11. 联想Phab2 Pro Tango手机测评
  12. 华为手机如何升级鸿蒙系统_华为鸿蒙系统真正要做的是什么?华为鸿蒙系统新升级即将揭秘...
  13. VMware虚拟机不能全屏
  14. 一个电子发烧友的程序员成长之路
  15. 表述为oracle进程有哪些 作用是什么,Oracle系统进程主要有哪些,作用是什么?...
  16. 计算机科学主题 一亩三分地 考试 中心 满分95大米 (只适用于2019年 之后注册的新人) 答案
  17. 用cmd看星球大战?当然可以。
  18. Linux 脚本后台执行
  19. 肠道健康从核心菌属开始:肠道菌群的关键
  20. PDF Fixer Pro(pdf文件修复工具)官方中文版V1.3 | 修PDF什么软件最好用? | pdf文件损坏了怎么修复?

热门文章

  1. SpringSecurity安全控件使用指南
  2. python可以用于plc吗_基于Python的丰炜系列PLC与PC串行通信的实现
  3. 【cuda】Nsight System 下载,安装与使用
  4. 大学生租房坑---亲身经历与总结吧(合肥暖虎公寓)
  5. 华东交通大学计算机全国排名,2018年华东交通大学世界排名、中国排名、专业排名...
  6. 计算机二级按键怎么出音乐,计算机二级考试时间_谈计算机技术在中学音乐教学中的运用...
  7. 哈工大网络安全实验四报告
  8. 肖特基二极管和普通二极管的区别是什么
  9. SweetAlert1关闭事件
  10. python找电影资源_Python爬虫爬取BT之家找电影资源