PHP中array_reduce()使用


array_reduce — 用回調函數迭代地將數組簡化為單一的值

給定一個數組:

$ar = array(1,2,3,4,5);

如果要求得這個數組中各個元素之和。

方法一、

很自然的用foreach實現

$sum = 0;
foreach ($ar as $v) {
    $sum+=$v;
}
echo $sum;

方法二、

我們可以用array_reduce實現。它是專門用來迭代數組的。該函數最多接收三個參數。

第一個參數接收數組

第二個參數函數名,也可以是匿名函數,函數有兩個參數,分別代表$result和$item

第三個參數(可選),該參數將被當成是數組中的第一個值來處理,或者如果數組為空的話就作為最終返回值。

function leijia($a,$b){
    $a+=$b;
    return $a;
}
$result = array_reduce($ar ,leijia);
echo $result;

繼續優化,在PHP5.3以上中可以用匿名函數了。使代碼更精簡。

$result = array_reduce($ar ,function($a,$b){
    $a+=$b;
    return $a;
});

array_reduce的強大不僅如此。看下面的例子。將數組$arr的首個元素彈出,作為初始值,避免min($result['min'], $item['min'])中$result為空。

否則最終結果min是空的。

$arr = array( 
    array('min' => 1.5456, 'max' => 2.28548, 'volume' => 23.152), 
    array('min' => 1.5457, 'max' => 2.28549, 'volume' => 23.152), 
    array('min' => 1.5458, 'max' => 2.28550, 'volume' => 23.152), 
    array('min' => 1.5459, 'max' => 2.28551, 'volume' => 23.152), 
    array('min' => 1.5460, 'max' => 2.28552, 'volume' => 23.152), 
); 

$initial = array_shift($arr); 

$t = array_reduce($arr, function($result, $item) { 
    $result['min'] = min($result['min'], $item['min']); 
    $result['max'] = max($result['max'], $item['max']); 
    $result['volume'] += $item['volume']; 

    return $result; 
}, $initial);

 總之,這種寫法比foreach更優雅,更少的定義變量。推薦使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM