键上的总和数组 - 可能是可能的,或者不是以良好的方式构造的数组

  • 本文关键字:数组 方式构 或者 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
                            )
                    )
            )
)

它只是一个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
)
$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条目中。

修改:

$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; 

最新更新