如何在php中的foreach中的数组中累积金额

时间:2017-02-01 06:17:38

标签: php arrays multidimensional-array

我有一个分组的多维数组。但我想总结数量,并为阵列本身的每个组提供总数。但我正在努力总结数组中每个组的数量 这是我的数组的样子

Array
        (
            ['Network 1'] => Array
                (
                    [0] => Array
                        (
                            [MSISDN] => 27729554427
                            [Network] => 'Network 1'
                            [Date] => '12-Mar-2016'
                            [Product] => 'Loan Product 1'
                            [Amount] => 1000.00
                        )

                    [1] => Array
                        (
                            [MSISDN] => 27725326345
                            [Network] => 'Network 1'
                            [Date] => '18-Mar-2016'
                            [Product] => 'Loan Product 2'
                            [Amount] => 3000.00
                        )
                )

            ['Network 2'] => Array
                (
                    [0] => Array
                        (
                            [MSISDN] => 27722342551
                            [Network] => 'Network 2'
                            [Date] => '16-Mar-2016'
                            [Product] => 'Loan Product 1'
                            [Amount] => 500.00
                        )

                    [1] => Array
                        (
                            [MSISDN] => 27729234533
                            [Network] => 'Network 2'
                            [Date] => '01-Apr-2016'
                            [Product] => 'Loan Product 1'
                            [Amount] => 100.00
                        )
                )
        )

这就是我想要的

Array
    (
        ['Network 1'] => Array
            (
                [0] => Array
                    (
                        [MSISDN] => 27729554427
                        [Network] => 'Network 1'
                        [Date] => '12-Mar-2016'
                        [Product] => 'Loan Product 1'
                        [Amount] => 1000.00
                    )

                [1] => Array
                    (
                        [MSISDN] => 27725326345
                        [Network] => 'Network 1'
                        [Date] => '18-Mar-2016'
                        [Product] => 'Loan Product 2'
                        [Amount] => 3000.00
                    )
            )
        ['Network 1 Aount total'] => 4000.00

        ['Network 2'] => Array
            (
                [0] => Array
                    (
                        [MSISDN] => 27722342551
                        [Network] => 'Network 2'
                        [Date] => '16-Mar-2016'
                        [Product] => 'Loan Product 1'
                        [Amount] => 500.00
                    )

                [1] => Array
                    (
                        [MSISDN] => 27729234533
                        [Network] => 'Network 2'
                        [Date] => '01-Apr-2016'
                        [Product] => 'Loan Product 1'
                        [Amount] => 100.00
                    )
            )
        ['Network 2 Aount total'] => 600.00    
    )

这是我试过的

        function _group_by($array, $key) {
        $return = array();
        foreach($array as $val) {
            $return[$val[$key]][] = $val;
            //$return[$val['Amount']] += $val; // this line is failing the one failing
        }

            echo '<pre>';
            print_r($return);
            echo '</pre>';
        exit();
        return $return;
    }

6 个答案:

答案 0 :(得分:1)

这样做(最简单的一个): -

foreach ($array as $key=>$val){
   $amount =  array_sum(array_map(function($item) { 
        return $item['Amount']; 
    }, $val));

    $array[$key.' Amount total'] = $amount;
}

输出: - https://eval.in/728162

答案 1 :(得分:0)

我认为你是以错误的方式做到这一点。要获取数组中的特定列,我们有

   array_column($array, $columnname);

功能。因此,使用它来计算总和并显示。

答案 2 :(得分:0)

我没有经过测试,但应该可以使用,或类似的东西

function _group_by($array, $key) {
    $return = array();
    foreach($array as $key=>$val) {
        $return[$key][] = $val;
        $total=0;
        foreach($val as $product){
            $total=$total+$product['Amount'];
        }
        $return[$key . ' Total Amount']=$total;
    }

    echo '<pre>';
    print_r($return);
    echo '</pre>';
    exit();
    return $return;
}

答案 3 :(得分:0)

检查此功能,

function _group_by($array, $key)
{
    foreach ($array as $k => $subArray) {
        $temp = 0;
        foreach ($subArray as $id => $value) {
            $temp += $value['Amount'];
        }
        $array[$k . 'Aount total'] = $temp;
    }
    return $array;
}

简单,有效。

答案 4 :(得分:0)

试试这个

foreach ($array as $key=>$val){
   $amount =  array_sum(array_column($val, 'Amount'));  
    $array[$key.' Aount total'] = $amount;
}

答案 5 :(得分:-1)

要交付预期的结果(总数紧随每个网络之后),请生成一个新的输出数组变量,并依次迭代网络和网络总数。

代码:(Demo

foreach ($array as $network => $row) {
    $result[$network] = $row;
    $result[$network . ' Total Amount'] = array_sum(array_column($row, 'Amount'));
}
var_export($result);

IMO,这是执行该过程的最干净的方法,因为:

  1. array_column()array_sum()是专门为这些任务而设计的。
  2. 无需声明临时$count变量即可保持运行总计。
  3. 没有一次性(不必要)变量