我正在尝试找出哪种方法会更快(如果有的话?)。我在这里设计了一个测试:http://codepad.org/odyUN0xg
当我运行该测试时,我的结果非常不一致。两者都变化很大。
测试有问题吗?
否则,任何人都可以建议哪一个会更快或更快?
好的伙计们,谢谢我在这里编辑了键盘:http://codepad.org/n1Xrt98J 随着所有的评论和讨论,我决定采用数组和。一旦我使用了那个microtime(true)的东西,它开始变得更快(array_sum)
为建议干杯,哦,我添加了一个“for”循环,以便结果更均匀,但正如结果所指出的那样,如果超过foreach,几乎没有时间节省。
答案 0 :(得分:3)
问题在于你采用了非常低的限制,1000。PHP解释器的开销要大得多。我会花1亿或类似的东西。
但我认为array_sum
更快,因为它更专业,可能在快速C中实现。
哦,正如Michael McTiernan所说,你必须将microtime()
的每个实例都改为microtime(true)
。 http://php.net/manual/en/function.microtime.php
最后,我不会使用codepad作为测试环境,因为你无法控制它。您不知道会发生什么以及您的流程是否暂停。
答案 1 :(得分:3)
老实说,使用人工测试没有什么价值,无论哪种方式,这听起来都是毫无意义的微优化,除非你在分析必要的代码之后将其明确地识别为问题区域。
因此,使用哪种感觉更合适可能是有意义的。我个人非常喜欢array_sum
- 毕竟这就是它的存在。
答案 2 :(得分:1)
将microtime()
的任何实例更改为microtime(true)
。
此外,经过测试后,结果并没有那么大的不同。
答案 3 :(得分:1)
$ s = microtime();
对没有参数的microtime()的调用将返回如下字符串:0.35250000 1300737802
。你可能想要这个:
$s = microtime(TRUE);
数组总和为0.125188秒 数字花了0.166603秒
这些测试需要运行几千次,这样才能获得不受微小外部因素影响的大量执行时间。
答案 4 :(得分:1)
你需要更大的跑步,并需要平均其中几个。您还应该将两个测试分成两个文件。服务器还有其他事情会干扰测试时间,因此需要平均多次运行。
array_sum()应该是两个中较快的一个,因为没有与之关联的额外脚本解析,但值得检查。
答案 5 :(得分:1)
几乎总是array_sum更快。它更多地取决于您的服务器php.ini配置,而不是array_sum和foreach之间的实际使用情况。
答案 6 :(得分:1)
关于这个问题,对于如下样本设置:
<?php
set_time_limit(0);
$s = microtime(TRUE);
$array = range(1, 10000);
$sum = 0;
for($j = 0; $j < 1000; $j++){
$sum += array_sum($array);
}
$s1 = microtime(TRUE);
$diff = $s1 - $s;
echo "for 1000 pass, array_sum took {$diff} seconds. Result = {$sum}<br/>";
$sum = 0;
$s2 = microtime(TRUE);
for($j = 0; $j < 1000; $j++){
foreach($array as $val){
$sum += $val;
}
}
$s3 = microtime(TRUE);
$diff = $s3 - $s2;
echo "for 1000 pass, foreach took {$diff} seconds. Result = {$sum}<br/>";
我得到的结果是foreach
总是比较慢。所以这应该回答你的问题。样品:
for 1000 pass, array_sum took 0.2720000743866 seconds. Result = 50005000000
for 1000 pass, foreach took 1.7239999771118 seconds. Result = 50005000000