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更优雅,更少的定义变量。推荐使用。

最新文章

  1. Android studio
  2. 再记录一下如何配置oracle instantclient
  3. Apache同时支持PHP和Python的配置方法
  4. 【持续集成】使用Jenkins实现多平台并行集成
  5. c++ 概念及学习/c++ concept&learning(一)
  6. Server Tomcat v7.0 Server at localhost failed to start.错误可能原因之一
  7. asp.net+MVC--1
  8. Property工具类,Properties文件工具类,PropertiesUtils工具类
  9. C++第三天学习
  10. 多线程:深入Thread.sleep
  11. 计蒜客NOIP模拟赛(3)D1T3 任性的国王
  12. centos 7 安装vscode
  13. Centos 安装 mysql yum
  14. YARN集群的mapreduce测试(一)
  15. HDU6341 Let Sudoku Rotate (杭电多校4J)
  16. 牛客OI周赛7-提高组 B小睿睿的询问(ST打表)
  17. K均值聚类
  18. SSM(Spring+SpringMvc+Mybatis)整合笔记
  19. [20170625]12c Extended statistics.txt
  20. 投入机器学习的怀抱?先学Python吧

热门文章

  1. batik-all-1.7
  2. 【ACM】那些年,我们挖(WA)过的最短路
  3. UVa 247 - Calling Circles(Floyd求有向图的传递闭包)
  4. BZOJ4602:[SDOI2016]齿轮(并查集)
  5. grep参数说明及常用用法(转)
  6. 4springboot:日志(下)
  7. 转发forward和重定向redirect的区别
  8. iview中table里嵌套i-switch、input、select等
  9. CToolBarCtrl工具栏设置总结(转)
  10. 安装MySQL8.0.13