以前就一直听说foreach最快,所以也一直再用这个循环数组,用起来确实不错,今天就做个性能比较.
目标
创建一个数组(三百万个元素),给数组内的每个元素末尾加字符串"...";
开始测试
for
有一定的局限性,数组的key必须是从零开始的连续数字
代码如图:
运行三次结果为
0.3869891166687
0.32546901702881
0.34614610671997
0.38621401786804
0.31786894798279
0.34128379821777
0.38577580451965
0.31955981254578
0.34966516494751
array_map
这个函数多用来同时循环多个数组,并执行回调函数返回元素组成的新数组,所以循环修改单个数组并不适合用这个.
代码如下
运行三次结果为
2.1073980331421
2.7509219646454
2.7619159221649
2.1138532161713
2.7321929931641
2.7346830368042
2.1031608581543
2.7401537895203
2.7383761405945
即便如此,还是很慢
array_walk
以引用传递的形式遍历你的数组
代码如下,也跑三百万
运行三次结果为
2.327211856842
2.9339678287506
2.9691359996796
2.3340609073639
2.9385440349579
2.9714319705963
2.3480849266052
2.9503059387207
2.9880568981171
也很慢...
foreach
带key
代码如下
跑三次结果
0.40047478675842
0.36870002746582
0.38437604904175
0.40766096115112
0.3668200969696
0.3840229511261
0.40708303451538
0.36531400680542
0.38672804832458
不带key
代码如下
跑三次结果
0.25531601905823
0.16732788085938
0.19288206100464
0.25440788269043
0.16787219047546
0.19229006767273
0.25856399536133
0.16770601272583
0.19120001792908
非常快.
结论
循环数组 foreach还是老大哥.
在不需要用到key值的时候尽量不要带key使用foreach,推荐直接引用修改.(用完别忘了unset一下,防止变量污染);