键上的Sum数组 - 可能还是数组的结构不是很好?

时间:2017-09-07 06:48:48

标签: php arrays sum

基于会计文件构建了以下数组,并希望根据金额为所有帐户的[trans]子阵列创建总和。查看array_column但感觉数组没有正确构建或以有效的方式构建?任何想法/建议都非常感激。

//澄清 嗨!非常感谢。我可能有点不清楚。对于[trans]的总人口,我想要计算帐户相同的金额。所以上面的数组会产生:

[1930] = -150.47-431.63 [5912] = 150.47 等

[#VER] => Array
    (
        [A1] => Array
            (
                [verdatum] => 20150107
                [vertext] => GOOGLE
                [trans] => Array
                    (
                        [0] => Array
                            (
                                [account] => 1930
                                [amount] => -150.47
                            )

                        [1] => Array
                            (
                                [account] => 5912
                                [amount] => 150.47
                            )

                        [2] => Array
                            (
                                [account] => 2645
                                [amount] => 37.62
                            )

                        [3] => Array
                            (
                                [account] => 2614
                                [amount] => -37.62
                            )

                    )

            )

        [A2] => Array
            (
                [verdatum] => 20150118
                [vertext] => Post
                [trans] => Array
                    (
                        [0] => Array
                            (
                                [account] => 1930
                                [amount] => -431.63
                            )

                        [1] => Array
                            (
                                [account] => 5710
                                [amount] => 345.30
                            )

                        [2] => Array
                            (
                                [account] => 2641
                                [amount] => 86.33
                            )

                    )

            )

)

3 个答案:

答案 0 :(得分:1)

它只是一个foreach循环来实现你预期的金额总和

$temp = array();
$new = array();
foreach($arr as $key=>$value){
  foreach($value["trans"] as $key2=>$value2){
    if(in_array($value2["account"], $temp)){
      $new[$value2["account"]] += $value2["amount"];
    }else {
      $new[$value2["account"]] = $value2["amount"];
      $temp[] = $value2["account"];
    }
  }
}
print_r($new);

现场演示:https://eval.in/857342

输出

 Array
(
  [1930] => -582.1
  [5912] => 150.47
  [2645] => 37.62
  [2614] => -37.62
  [5710] => 345.3
  [2641] => 86.33
)

答案 1 :(得分:0)

$grand_total = 0;
array_walk($my_array['#VER'],function (&$ver) use (&$grand_total){
    $ver['total_amount'] = 0;
    foreach($ver['trans'] as $trans){
        $ver['total_amount'] += $trans['amount'];
    }
    $grand_total += $ver['total_amount'];
});

所以,只需循环浏览你的" VER"然后在每个反转上再次循环。就如此容易。我已经使用了array_walk和foreach技术,主要是为了向您展示两种方式。你可能更喜欢使用两个foreach,或者两个array_walk,它可以工作。

此脚本添加到$grand_total变量,并将所有事务的总数存储到每个VER条目中。

答案 2 :(得分:0)

修改:

$grand_total = 0;
        array_walk($urarr['#VER'],function (&$ver) use (&$grand_total){
            foreach($ver['trans'] as $trans){
                if ($trans['amount'] < 0){
                    $neg += abs($trans['amount']);
                }else{
                    $pos += abs($trans['amount']);
                }
            }
            $diff = ($pos < $neg) ? "-".($neg - $pos) : ($pos - $neg);
            $grand_total += $diff;
        });
    print $grand_total;