• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
孙龙 程序员
少时总觉为人易,华年方知立业难
博客园    首页    新随笔    联系   管理    订阅  订阅
PHP中array_reduce()使用
rray_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更优雅,更少的定义变量。推荐使用。

本文来自博客园,作者:孙龙-程序员,转载请注明原文链接:https://www.cnblogs.com/sunlong88/articles/8681423.html

posted on 2018-03-31 11:22  孙龙-程序员  阅读(960)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3