在PHP中创建嵌套数组的总和

时间:2014-05-15 15:52:21

标签: php arrays loops

我有3级嵌套数组,我想帮助生成其值的总和。 数组就像

                                    SUM
                                 /       \
                               A          B
                              / \         /\
                        Billed  Route Billed Route
                         /        \      /      \
                       Value     Value  Value    Value

如何计算Billed和Route字段的总和?

到目前为止,我有这段代码

foreach($sum as $client)
            {

                $s = 0;
                foreach($client as $stat_name=>$stat_value)
                {
                    $val = 0;
                    // echo "<br><u><i>";
                    // echo $stat_name;
                    // echo "</u></i><br>";
                    foreach($stat_value as $value)
                    {
                        $val += intval($value);
                    }
                    $sum2[$stat_name] += $val;
                }

            }

我在每个新密钥的第一个循环上收到一个未定义的索引错误。

3 个答案:

答案 0 :(得分:1)

您是否已将$sum2[$stat_name]定义为0?如果没有,您将在第二个foreach循环的每次迭代中得到未定义的索引错误,因为您尝试对未定义的值执行+=

此外,如果您尝试添加BilledRoute的值,则将它们存储在关联数组($sum2[$stat_name])的不同部分中是一个额外的步骤。只需将它们放在数组的相同键中即可。

答案 1 :(得分:0)

如果这些是数组中的实际键,那么:

$route = 0;
$billed = 0;
foreach($yourarray['SUM'] AS $ab => $subarray) {
   $billed += $subarray['Billed']['Value'];
   $route  += $subarray['Routed']['Value'];
}

答案 2 :(得分:0)

$sum2[$stat_name] += $val;

与:

相同
$sum2[$stat_name] = $sum2[$stat_name] + $val;
                    ^^^^^^^^^^^^^^^^^ undefined the first time you loop

要解决这个问题,你应该初始化它:

$sum2[$stat_name] = isset($sum2[$stat_name]) ? $sum2[$stat_name] : 0;
$sum2[$stat_name] += $val;