如果子数组不是相同的长度(不同的键数),php和多个子数组的值

时间:2014-04-26 13:11:11

标签: php arrays sum

有这样的数组(在这里放置代码http://codepad.viper-7.com/mTqf6W

Array
(
[17,bank stmt,1,23,3,2014] => Array
    (
        [0] => Array
            (
                [RecordDay] => 17
                [Amount] => 1.5
            )
    )
[17,invoice,2,17,3,2014] => Array
    (
        [0] => Array
            (
                [RecordDay] => 17
                [Amount] => 0.21
            )

        [1] => Array
            (
                [RecordDay] => 17
                [Amount] => 1
            )

    )


)

想要为每个子阵列获得[Amount]的总计。对于第一个子阵列,只有一个键,因此Total等于[Amount]。但是对于第二个子阵列,有2个键(可能超过2个键),所以在某种程度上需要总结所有[Amount]

[17,bank stmt,1,23,3,2014]为1.5,[17,invoice,2,17,3,2014]为1.21

以下示例PHP Array_Sum on multi dimensional array尝试创建代码。创建

$values = array('Amount' => 0);
$counter = 0;
foreach ($temp_array as $key => $item) {
$values['Amount'] += $item[$counter]['Amount'];
$counter++;
}

获取错误'注意:未定义的偏移量:2'

1 个答案:

答案 0 :(得分:2)

如果你有PHP 5.5+,可以使用array_column()array_sum()来完成:

foreach ($array as $sub) {
    echo array_sum(array_column($sub, 'Amount'));
}

使用array_map()提取所有金额,然后使用array_sum()对数组中的值求和:

foreach ($array as $sub) {
    echo array_sum(array_map(function($item) {
        return $item['Amount'];
    }, $sub));
}

输出:

1.5
1.21

Demo