php 数组去重
来源:互联网 发布:多功能助手软件下载 编辑:程序博客网 时间:2024/05/01 12:27
1、使用array_unique方法进行去重
对数组元素进行去重,我们一般会使用array_unique方法,使用这个方法可以把数组中的元素去重。
<?php $arr = array(1,1,2,3,3,3,4,4,5,6,6,7,8,8,9,9,9); $arr = array_unique($arr); $arr = array_values($arr); print_r($arr);?>
输出:
Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9)
去重后,键值会不按顺序,可以使用 array_values() 函数把键值重新排序(即只取数组中的 value,key 重新生成 0,1,2,3……..)。
2、使用array_unique方法去重效率
<?php $arr = array(); // 创建100000个随机元素的数组 for($i=0; $i<100000; $i++){ $arr[] = mt_rand(1,99); } // 记录开始时间 $starttime = getMicrotime(); // 去重 $arr = array_unique($arr); // 记录结束时间 $endtime = getMicrotime(); $arr = array_values($arr); echo 'unique count:'.count($arr).'<br>'; echo 'run time:'.(float)(($endtime-$starttime)*1000).'ms<br>'; echo 'use memory:'.getUseMemory(); /** * 获取使用内存 * @return float */ function getUseMemory(){ $use_memory = round(memory_get_usage(true)/1024,2).'kb'; return $use_memory; } /** * 获取microtime * @return float */ function getMicrotime(){ list($usec, $sec) = explode(' ', microtime()); return (float)$usec + (float)$sec; }?>
unique count:99
run time:653.39303016663ms
use memory:5120kb
使用 array_unique 方法去重,运行时间需要约 650ms,内存占用约 5m
上面是原作者的结果,由于我的环境是 ubuntu + php7,因此结果不一样:
unique count:99
run time:266.930103302ms
use memory:2048kb
运行时间需要约 270ms,内存占用约 2m
3、更快的数组去重方法
PHP 有一个键值互换的方法 array_flip(),我们可以使用这个方法去重,因为键值互换,原来重复的值会变为相同的键,由于键值必须唯一,因此能够达到去重的目的。
然后再进行一次键值互换,把键和值换回来则可以完成去重。
<?php $arr = array(); // 创建100000个随机元素的数组 for($i=0; $i<100000; $i++){ $arr[] = mt_rand(1,99); } // 记录开始时间 $starttime = getMicrotime(); //$arr = array_unique($arr); // 使用键值互换去重 $arr = array_flip($arr); $arr = array_flip($arr); // 记录结束时间 $endtime = getMicrotime(); //重新生成键值 $arr = array_values($arr); echo 'unique count:'.count($arr).'<br>'; echo 'run time:'.(float)(($endtime-$starttime)*1000).'ms<br>'; echo 'use memory:'.getUseMemory(); /** * 获取使用内存 * @return float */ function getUseMemory(){ $use_memory = round(memory_get_usage(true)/1024,2).'kb'; return $use_memory; } /** * 获取microtime * @return float */ function getMicrotime(){ list($usec, $sec) = explode(' ', microtime()); return (float)$usec + (float)$sec; }?>
unique count:99
run time:12.840032577515ms
use memory:768kb
使用array_flip方法去重,运行时间需要约13ms,内存占用约2m
上面是原作者的结果,由于我的环境是 ubuntu + php7,因此结果不一样:
unique count:99
run time:5.2969455718994ms
use memory:2048kb
运行时间需要约 5ms,内存占用约 2m
因此使用 array_flip 方法去重比使用 array_unique 方法运行时间减少98%,内存占用减少4/5;
最后:
可以发现,使用了 array_flip() 函数,效率提高幅度很大。
除了上面的方法外,我们还可以使用 array_keys() 函数,就是将上面代码中的:
// 使用键值互换去重$arr = array_flip($arr);$arr = array_flip($arr);// 记录结束时间$endtime = getMicrotime();//重新生成键值$arr = array_values($arr);
换成:
$arr = array_flip($arr);$arr = array_keys($arr);$endtime = getMicrotime();
即可。
array_keys(),取数组的所有 key 作为 value 重新组成数组。
运行结果:
unique count:99
run time:5.2149295806885ms
use memory:2048kb
与 array_flip() 基本不发生变化,当然,我没有看过这两个函数的源码,不能确切的说哪个方法更好。
总的来说,比 array_unique() 的性能好的不是一点点。
本博客参考(90%+)自http://blog.csdn.net/fdipzone/article/details/50573353
- php 数组去重
- php数组去重
- 数组去重 PHP
- php数组去重
- php 数组去重
- php 数组去重
- php数组去重
- php数组去重
- php 数组去重
- php数组去重
- Php 数组去重
- php 数组去重
- php 数组去重
- php三维数组去重
- php二维数组去重
- PHP二维数组去重
- php数组去重 (转
- php二维数组去重
- java基础--集合(1)
- Java代码优化
- 在ubuntu配置smb共享目录
- Hbase启动出现的问题 master.HMasterCommandLine: Master exiting
- 移动端click事件延迟300ms到底是怎么回事,该如何解决?
- php 数组去重
- android 命令获取包名和类名等
- BZOJ 3238: [Ahoi2013]差异 后缀数组
- int(1) int(11) 的区别
- 在Ubuntu16.04中将启动和关闭Hadoop的命令行写成脚本文件
- php.exe和php-win.exe和php-cgi.exe的区别
- fail-fast理解
- Hdu 2546 饭卡(01背包)
- Model model,HttpServletRequest request, ModelMap map参数使用与区别