PHP自定义函数数组去重性能测试
- 2018-09-26 16:44:00
- 小熊 原创
- 14483
一、原理
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()性能比较,差距还是比较大的。
| 联系人: | 小熊 |
|---|---|
| 电话: | 180****8880 |
| Email: | admin@cnsite.org |
| QQ: | 929410000 |
| 微信: | itseor |
| 微博: | itseoer |
| 网址: | www.beatmoon.com |

