php数组运算效率,PHP一维数组去重函数array_unique()去重效率测试

一、array_unique的定义

(PHP 4 >= 4.0.1, PHP 5, PHP 7)

array_unique — 移除数组中重复的值

说明

array array_unique ( array $array [, int $sort_flags = SORT_STRING ] )

array_unique()接受array作为输入并返回没有重复值的新数组。

注意:

键名保留不变,array_unique()先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的array中同一个值的第一个出现的键名会被保留。

当且仅当 (string) $elem1 === (string) $elem2 时两个单元被认为相同。 例如,字符串表达一样时,会使用首个元素。

参数

array

输入的数组。

sort_flags

第二个可选参数sort_flags 可用于修改排序行为:

排序类型标记:

SORT_REGULAR - 按照通常方法比较(不修改类型)。

SORT_NUMERIC - 按照数字形式比较。

SORT_STRING - 按照字符串形式比较。

SORT_LOCALE_STRING - 根据当前的本地化设置,按照字符串比较。

返回值

返回过滤后的数组。

举例

$input = array("a" => "green", "red", "b" => "green", "blue", "red");

$result = array_unique($input);

print_r($result);

?>

输出为:

Array

(

[a] => green

[0] => red

[1] => blue

)

二、array_unique方法去重效率测试

创建100000个随机元素的数组。

for($i=0; $i<100000; $i++)

{

$arr[] = mt_rand(1,99);

}

2.记录开始去重时间。

$starttime = getMicrotime();

3.去重。

$arr = array_unique($arr);

4.记录结束时间。

$endtime = getMicrotime();

5.PHP占用内存函数。

/**

* 获取使用内存

* @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).'
';

echo 'run time:'.(float)(($endtime-$starttime)*1000).'ms
';

echo 'use memory:'.getUseMemory();

8.完整程序展示。

for($i=0; $i<100000; $i++)

{

$arr[] = mt_rand(1,99);

}

$starttime = getMicrotime();

$arr = array_unique($arr);

$endtime = getMicrotime();

echo 'unique count:'.count($arr).'
';

echo 'run time:'.(float)(($endtime-$starttime)*1000).'ms
';

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:4.2839050292969ms

use memory:2048kb

10.结果截图

6aa1a76da2f9f2d159879e83be423853.png

11.测试100次,计算平均值

略(可使用程序循环100次计算得出。)

总结:

基于该函数功能实现原理,先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。该函数性能确实不容乐观。

自定义写一个函数,来解决PHP一维数组去重问题,其性能见《

PHP自定义函数数组去重性能测试》。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值