PHP數組處理函數的使用array_reduce(二)

來源:互聯網
上載者:User

標籤:

關於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(二)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.