应该是 array_walk 吧?

解决方案 »

  1.   

    说的是 foreach 循环 操作值  还是直接用 array_walk...
      

  2.   

    array_walk 能做的 foreach 都能做到
    foreach 能做的 array_walk 不一定能做,例如增加/删除单元
      

  3.   

    测试代码<?php
    function a() {
        $array = array(1, 2, 3, 4, 5); 
        for($i = 0; $i < 1000000; $i ++) {
            $tmp = array();
            foreach($array as $e) 
                $tmp[] = $e * $e; 
        }   
    }
    function b() {
        $array = array(1, 2, 3, 4, 5); 
        for($i = 0; $i < 1000000; $i ++) {
            $tmp = $array;
            array_walk($tmp, function(&$v) {$v *= $v;});
        }   
    }
    $start  = microtime(true);
    a();
    $end    = microtime(true);
    echo 'foreach total time: ' . ($end - $start) . chr(10);
    $start  = microtime(true);
    b();
    $end    = microtime(true);
    echo 'array_walk total time: ' . ($end - $start) . chr(10);
    ?>测试输出
    foreach total time: 4.1798651218414
    array_walk total time: 10.291253089905
    结论#上述情况下, foreach的性能是array_walk的2.5倍左右
    #array_walk会多出一个函数调用的消耗. 所以会多一点..
    #不过平时可以忽略, 因为100万次才多6秒, 也就是一次耗时在10^-5数量级之内...