牛骨文教育服务平台(让学习变的简单)
博文笔记

【性能为王】从PHP源码剖析array_keys和array_unique

创建时间:2016-05-27 投稿人: 浏览次数:170

之前在[译]更快的方式实现PHP数组去重这篇文章里讨论了使用array_flip后再调用array_keys函数替换直接调用array_unique函数实现数组去重性能较好。由于原文没有给出源码分析和测试的结果,导致给读者造成迷惑,在此说声抱歉。为了解开读者的疑惑,笔者承诺了会补上源码的分析,于是花了一些时间去研究PHP的源码,现在此补上详细的说明。

我在github有对PHP源码更详细的注解。感兴趣的可以围观一下,给个star。PHP5.4源码注解。可以通过commit记录查看已添加的注解。

性能分析

从运行性能上分析,看看下面的测试代码:

$test=array();
for($run=0; $run<10000; $run++)
$test[]=rand(0,100);

$time=microtime(true);

$out = array_unique($test);

$time=microtime(true)-$time;
echo "Array Unique: ".$time."
";

$time=microtime(true);

$out=array_keys(array_flip($test));

$time=microtime(true)-$time;
echo "Keys Flip: ".$time."
";

$time=microtime(true);

$out=array_flip(array_flip($test));

$time=microtime(true)-$time;
echo "Flip Flip: ".$time."
";
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。