PHP自定义函数数组去重性能测试
- 2018-09-26 16:44:00
- 小熊 原创
- 11878
一、原理
php有一个键值互换的方法array_flip,我们可以使用这个方法去重,因为键值互换,原来重复的值会变为相同的键。
然后再进行一次键值互换,把键和值换回来则可以完成去重。
二、array_flip函数解析
array_flip()
(PHP 4, PHP 5, PHP 7)
array_flip — 交换数组中的键和值。
说明
array array_flip ( array $array )
array_flip() 返回一个反转后的 array,例如 array 中的键名变成了值,而 array 中的值成了键名。
注意:
array 中的值需要能够作为合法的键名(例如需要是 integer 或者 string)。如果类型不对,将出现一个警告,并且有问题的键/值对将不会出现在结果里。
如果同一个值出现多次,则最后一个键名将作为它的值,其它键会被丢弃。
参数:
array
要交换键/值对的数组。
返回值:
成功时返回交换后的数组,如果失败返回 NULL。
举例:
$input = array("a" => 1, "b" => 1, "c" => 2); $flipped = array_flip($input); print_r($flipped);
输出为:
Array
(
[1] => b
[2] => c
)
三、方法实现并测试性能
创建100000个随机元素的数组。
for($i=0; $i<100000; $i++) { $arr[] = mt_rand(1,99); }
2.记录开始去重时间。
$starttime = getMicrotime();
3.使用键值互换去重。
$arr = array_flip($arr); $arr = array_flip($arr);
4.记录去重结束时间。
$endtime = getMicrotime();
5.获取使用内存。
/** * 获取使用内存 * @return float * @author itbear * @link www.beatmoon.com */ function getUseMemory() { $use_memory = round(memory_get_usage(true)/1024,2).'kb'; return $use_memory; }
6.获取microtime
/** * 获取microtime * @return float * @author itbear * @link www.beatmoon.com */ function getMicrotime() { list($usec, $sec) = explode(' ', microtime()); return (float)$usec + (float)$sec; }
7.输出结果。
echo 'unique count:'.count($arr).'<br>'; echo 'run time:'.(float)(($endtime-$starttime)*1000).'ms<br>'; echo 'use memory:'.getUseMemory();
8.完整代码。
for($i=0; $i<100000; $i++) { $arr[] = mt_rand(1,99); } $starttime = getMicrotime(); $arr = array_flip($arr); $arr = array_flip($arr); $endtime = getMicrotime(); echo 'unique count:'.count($arr).'<br>'; echo 'run time:'.(float)(($endtime-$starttime)*1000).'ms<br>'; echo 'use memory:'.getUseMemory(); /** * 获取使用内存 * @return float * @author itbear * @link www.beatmoon.com */ function getUseMemory() { $use_memory = round(memory_get_usage(true)/1024,2).'kb'; return $use_memory; } /** * 获取microtime * @return float * @author itbear * @link www.beatmoon.com */ function getMicrotime() { list($usec, $sec) = explode(' ', microtime()); return (float)$usec + (float)$sec; }
9.运行结果。
unique count:99
run time:2.3479461669922ms
use memory:2048kb
10.结果截图。
11.测试100次,计算平均值
略(可使用程序循环100次计算得出。)
总结:
根据前面的系统函数array_unique()性能比较,差距还是比较大的。
联系人: | 小熊 |
---|---|
电话: | 18037578880 |
Email: | admin@cnsite.org |
QQ: | 929410000 |
微信: | itseor |
微博: | itseoer |
网址: | www.beatmoon.com |