美文网首页Web 开发PHP实战PHP经验分享
[PHP]返回数组中某一列的和

[PHP]返回数组中某一列的和

作者: 夜航星osmo | 来源:发表于2017-08-04 14:59 被阅读197次
    这是一张效果图

    返回数组中某一列的和,其实说白了就是单列求和。

    从上图可以看出,这是一个二维数组。

    $arr = array(   

        array(1,2,3,4,5,6),

        array(6,5,4,3,2,1),

        array(1,2,3,4,5,6),

        array(6,5,4,3,2,1)

    )

    此时,我们要求最后一列(下标为5的值)的总和,我们将要用到一下方法:

    /*

    * 返回数组中某一列的和 (数组中的值为数字)

    * @param $array  数据数组

    * @param $columnName  列名

    */

    function sumValueInArray($array,$columnName)

    {

        $rtn = 0;

        if(!is_null($array) && count($array) > 0)

        {

            foreach ($array as $key => $value) {

                if(!is_null($value) && array_key_exists($columnName, $value))

                {

                $rtn = $rtn + $value[$columnName];

                }

            }

        }

        return $rtn;

    }

        $res = sumValueInArray($arr,5);

    输出结果与效果图一致

    此方法可用来处理流水记录,如有更多方法,欢迎留言!

    更新一下,除上述方法之外,利用数组函数array_reduce(),通过自定义闭包函数返回结果

    function sumValuesInArray($array, $columnName)

    {

        $sum = array_reduce($array, function($carry, $item) use($columnName){

            return $carry + $item[$columnName];

        });

        return $sum;

    }

    $res = sumValueInArray($arr,2);

    echo $res;

    输出结果亦为单列值的和。

    这里通过使用闭包函数,减少了条件判断,foreach循环及参数的使用,较之前更为简便。推荐给大家。望能集思广益,写出更高效的代码!

    相关文章

      网友评论

      • AUCG:还以为会是个算法题…
        夜航星osmo:@AUCG 你可以自己写一个算法
      • 梅皋月:兄台写的文章我一个看不懂,神呼
        夜航星osmo:@小丸子格格 哈哈哈,没事 不懂最好
      • 摩凝:你那改过的也是多此一举呀,直接就是结果,还要这个函数⁄(⁄ ⁄ ⁄ω⁄ ⁄ ⁄)⁄
        夜航星osmo:@摩凝 为什么会bug修不完,这不就是一个单独的方法么
        摩凝:@Aeggainety 会让你做项目的时候 bug 修不完的。看点好书呀
        夜航星osmo:@摩凝 这样上下对比起来更清楚
      • 摩凝:太啰嗦了!

        $cloumn = 5;
        $sum = array_reduce($arr, function($carry, $item) use($cloumn){
        return $carry + $item[$index];
        });

        搞定。
        夜航星osmo:@摩凝 我发现了:smile:
        摩凝:@Aeggainety 把 column 写成 index 了:-P
        夜航星osmo:刚刚试了一下,膜拜大佬

      本文标题:[PHP]返回数组中某一列的和

      本文链接:https://www.haomeiwen.com/subject/dqwvlxtx.html