概述

使用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. 大二暑假周进度报告(三)
  2. 日期时间类,按特定格式显示日期时间
  3. Asp.Net中虚拟文件系统的使用
  4. 【BZOJ3160】万径人踪灭 Manacher+FFT
  5. Free tour II SPOJ - FTOUR2 点分治 + 树状数组
  6. Xcode添加静态库以及编译选项配置常见问题
  7. MySql 时间戳存char还是存int?
  8. 分布式存储绝不简单 —— UCan下午茶-武汉站纪实
  9. python发音翻译-Python translate()方法
  10. “只要就“其实是废话,没有任何用处
  11. 网络热门知识点,Linux内核——网络协议栈基本知识
  12. windows cmd 提示 ‘系统找不到指定路径‘ 提示 ‘ECHO 处于关闭状态‘
  13. 企微裂变定位裂变,实现粉丝增长,提高客户留存率。
  14. 培训机构让考java证书有必要吗在线等
  15. 关于亚马逊人的财务自由
  16. 安卓动态修改系统状态栏背景和文字颜色,以及动态显示或隐藏系统状态栏
  17. 模型量化论文阅读#4----EWGS:Network Quantization with Element-wise Gradient Scaling
  18. 购买Blender cloud支援今年官方开源电影Gooseberry
  19. 快速傅里叶变换使用方法
  20. excel多组数据散点图生成

热门文章

  1. VirtuaNES.v0.97源码探究7 NES文件格式
  2. 瑞星U盘杀毒工具制作! 实验完全正确。
  3. 木头人的伤感空间日志发布:再美只是瞬间而已~~~
  4. Ubuntu中安装中文语言包
  5. 在 3ds Max 中打开或保存文件时间很长,解决方案来了
  6. GPU 编程 CPU 异同点_GPU(图形处理器) ARCHITECTURE的变迁史
  7. 百度发布国内首款AI输入法 进入全感官输入2.0时代
  8. 番外3法鲁的新女友——《地与光》
  9. shell 知:awk
  10. Python 游戏:300行代码实现俄罗斯方块