標籤:
關於PHP數組操作函數更為細緻的用法大家還可以參考PHP線上參考手冊:http://php.net/manual/zh/index.php
array_reduce — 用回呼函數迭代地將數組簡化為單一的值
給定一個數組:
$ar = array(1,2,3,4,5);
如果要求得這個數組中各個元素之和。
方法一:
很自然的用foreach實現
1 $sum = 0;2 foreach ($ar as $v) {3 $sum+=$v;4 }5 echo $sum;
View Code
方法二:
我們可以用array_reduce實現。它是專門用來迭代數組的。該函數最多接收三個參數。
第一個參數接收數組
第二個參數函數名,也可以是匿名函數,函數有兩個參數,分別代表$result和$item
第三個參數(可選),該參數將被當成是數組中的第一個值來處理,或者如果數組為空白的話就作為最終傳回值。
1 function leijia($a,$b){2 $a+=$b;3 return $a;4 }5 $result = array_reduce($ar ,leijia);6 echo $result;
View Code
繼續最佳化,在PHP5.3以上中可以用匿名函數了。使代碼更精簡。
1 $result = array_reduce($ar ,function($a,$b){2 $a+=$b;3 return $a;4 });
View Code
array_reduce的強大不僅如此。看下面的例子。將數組$arr的首個元素彈出,作為初始值,避免min($result[‘min‘], $item[‘min‘])中$result為空白。
否則最終結果min是空的。
1 $arr = array( 2 array(‘min‘ => 1.5456, ‘max‘ => 2.28548, ‘volume‘ => 23.152), 3 array(‘min‘ => 1.5457, ‘max‘ => 2.28549, ‘volume‘ => 23.152), 4 array(‘min‘ => 1.5458, ‘max‘ => 2.28550, ‘volume‘ => 23.152), 5 array(‘min‘ => 1.5459, ‘max‘ => 2.28551, ‘volume‘ => 23.152), 6 array(‘min‘ => 1.5460, ‘max‘ => 2.28552, ‘volume‘ => 23.152), 7 ); 8 9 $initial = array_shift($arr); 10 11 $t = array_reduce($arr, function($result, $item) { 12 $result[‘min‘] = min($result[‘min‘], $item[‘min‘]); 13 $result[‘max‘] = max($result[‘max‘], $item[‘max‘]); 14 $result[‘volume‘] += $item[‘volume‘]; 15 16 return $result; 17 }, $initial);
View Code
總之,這種寫法比foreach更優雅,更少的定義變數。推薦使用。
很明顯,上一篇文章(PHP數組處理函數的使用array_push(一))我們就可以這樣實現:
1 $ids = array_reduce($user, function($v,$w){2 $v[$w["id"]]=$w["name"];3 return $v;4 });
View Code
實現效果:
PHP數組處理函數的使用array_reduce(二)