博文链接: PHP中foreach与for的对比测试以及语句块带来的性能消耗测试
废话不多说, 结论如下:1. 在for, foreach, if, while(未测试, 推断)等等可以用{}带有语句块的地方, 如果业务逻辑上允许被改造为单条语句, 则尽量不要使用{}.2. foreach比for快一些
结论主要是第一条, 是优化代码时无意中发现, 请知道理论的朋友讲讲, 或者反对的朋友请提供数据, 共同进步, 谢谢.下面是测试代码:$times = 1000000;
$i = 1;
$datas = array();
while($i <= $times) array_push($datas, $i++);$start = microtime(true);
foreach($datas as $index => $data) $data + 1;
echo 'foreach使用单条语句耗时'.(microtime(true) - $start).'秒/'.$times.'次.<br />';$start = microtime(true);
foreach($datas as $index => $data) {
$data + 1;
}
echo 'foreach使用花括号语句块耗时'.(microtime(true) - $start).'秒/'.$times.'次.<br />';$start = microtime(true);
for($i = 0; $i < $times; $i ++) $datas[$i] + 1;
echo 'for使用单条语句耗时'.(microtime(true) - $start).'秒/'.$times.'次.<br />';$start = microtime(true);
for($i = 0; $i < $times; $i ++) {
$datas[$i] + 1;
}
echo 'for使用花括号语句块耗时'.(microtime(true) - $start).'秒/'.$times.'次.<br />';
//测试输出结果:
//foreach使用单条语句耗时0.127368927002秒/1000000次.
//foreach使用花括号语句块耗时6.78815078735秒/1000000次.
//for使用单条语句耗时6.77403593063秒/1000000次.
//for使用花括号语句块耗时13.2349820137秒/1000000次.
//以上四条测试结论:
//1. 优先使用foreach
//2. 尽可能把语句块优化成为单条语句
$start = microtime(true);
foreach($datas as $index => $data) 
if(true) $data + 1;
echo 'if使用单条语句耗时'.(microtime(true) - $start).'秒/'.$times.'次.<br />';$start = microtime(true);
foreach($datas as $index => $data) 
if(true) {
$data + 1;
}
echo 'if使用花括号语句块耗时'.(microtime(true) - $start).'秒/'.$times.'次.<br />';
//测试结果输出:
//if使用单条语句耗时0.159381151199秒/1000000次.
//if使用花括号语句块耗时6.87667107582秒/1000000次.
//结论: 尽量少使用语句块

解决方案 »

  1.   

    个人觉得{
    }
    是为了程序易读,,,一般遇到同事不加{},都要求加上,自己手头修改,也会加上去
    另外,我本机测试了一下你的代码,尽量用foreach是同意的,但是加不加{}差别极小
    有好多次,还是加了的运行快
      

  2.   

    1.
    foreach使用单条语句耗时0.3329381942749秒/1000000次.
    foreach使用花括号语句块耗时0.29159283638秒/1000000次.
    for使用单条语句耗时0.36926007270813秒/1000000次.
    for使用花括号语句块耗时0.38744306564331秒/1000000次.2.
    foreach使用单条语句耗时0.31623697280884秒/1000000次.
    foreach使用花括号语句块耗时0.30771088600159秒/1000000次.
    for使用单条语句耗时0.37136602401733秒/1000000次.
    for使用花括号语句块耗时0.36817598342896秒/1000000次.3.
    foreach使用单条语句耗时0.30369997024536秒/1000000次.
    foreach使用花括号语句块耗时0.29136395454407秒/1000000次.
    for使用单条语句耗时0.35858488082886秒/1000000次.
    for使用花括号语句块耗时0.36309790611267秒/1000000次.================================================
    这是我这里直接用你的代码测试的结果,我这里相差很小,甚至foreach使用花括号会比没使用要稍微快一点点
      

  3.   

    而使用for带化括号,则3次有一次比没有使用快。但差别也很小
      

  4.   


    呵呵, 刚重新看了下, 我代码里面的数据是在eclipse里面运行的, 
    在服务器环境下, 确实是没有问题的.谢谢.
      

  5.   

    LZ现在  重心转移到PHP了?JAVA呢
      

  6.   

    测试环境Firefox + Apache
    第一次运行结果
    foreach使用单条语句耗时0.145856142044秒/1000000次.
    foreach使用花括号语句块耗时0.140591859818秒/1000000次.
    for使用单条语句耗时0.171879053116秒/1000000次.
    for使用花括号语句块耗时0.17019701004秒/1000000次.
    if使用单条语句耗时0.148460865021秒/1000000次.
    if使用花括号语句块耗时0.143425941467秒/1000000次.第二次
    foreach使用单条语句耗时0.151071071625秒/1000000次.
    foreach使用花括号语句块耗时0.139437913895秒/1000000次.
    for使用单条语句耗时0.179073810577秒/1000000次.
    for使用花括号语句块耗时0.191153764725秒/1000000次.
    if使用单条语句耗时0.144267082214秒/1000000次.
    if使用花括号语句块耗时0.158224105835秒/1000000次.第三次
    foreach使用单条语句耗时0.145075082779秒/1000000次.
    foreach使用花括号语句块耗时0.142952919006秒/1000000次.
    for使用单条语句耗时0.176280021667秒/1000000次.
    for使用花括号语句块耗时0.177093982697秒/1000000次.
    if使用单条语句耗时0.165174007416秒/1000000次.
    if使用花括号语句块耗时0.149832010269秒/1000000次.没有出现楼主说的结论,相反带花括号的还会快一点。
      

  7.   


    呵呵, 用apache测了, 还有linux下直接php xxx.php运行都没事, 是eclipse中运行时导致的.....脸红
      

  8.   

    Eclipse的确很奇怪,执行run php script,第一次不返回结果,再运行一次才返回,我用其他脚本执行也是这样,不知道是什么原因。
      

  9.   

    foreach使用单条语句耗时0.132885932922秒/1000000次.
    foreach使用花括号语句块耗时6.77041196823秒/1000000次.
    for使用单条语句耗时6.75312113762秒/1000000次.
    for使用花括号语句块耗时13.0979750156秒/1000000次.
    if使用单条语句耗时0.164193868637秒/1000000次.
    if使用花括号语句块耗时6.76437187195秒/1000000次.其他环境和各位结论一致, 这是eclipse中的run as php script得到的结果, 运行时配置的是apache下的php解释器, 这就有点不明白了, 期望大牛解答.