基于会计文件构建了以下数组,并希望根据金额为所有帐户的[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
)
)
)
)
答案 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);
输出
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;