zoukankan      html  css  js  c++  java
  • 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更优雅,更少的定义变量。推荐使用。

  • 相关阅读:
    js 定时器 执行一次和重复执行
    Django 会议室预定
    关于跨域介绍和djiago解决跨域问题
    原生Form 和 Form组件 Modelform
    关于Djiango中 前端多对多字段点(,)的显示问题
    Djiango权限组件
    关于 or 判断都是Ture的问题
    基于多对多字段的增删改查
    二.面向对象进阶
    python大数据初探--pandas,numpy代码示例
  • 原文地址:https://www.cnblogs.com/mafeifan/p/3502190.html
Copyright © 2011-2022 走看看