Php 多维数组上每个键的和值

Php 多维数组上每个键的和值,php,arrays,multidimensional-array,foreach,sum,Php,Arrays,Multidimensional Array,Foreach,Sum,我有一个草堆,我想把每个数组的值分别相加。这就是我所拥有的: Array //ALL THE HAYSTACK ( [0] => Array //REPRESENTS MONTH 1 ( [0] => Array //REPRESENTS WEEK 1 ( [week] => 1 [user1] => Array

我有一个草堆,我想把每个数组的值分别相加。这就是我所拥有的:

Array //ALL THE HAYSTACK
(
    [0] => Array //REPRESENTS MONTH 1
        (
            [0] => Array  //REPRESENTS WEEK 1
                (
                    [week] => 1
                    [user1] => Array
                        (
                            [0] => Array
                                (
                                    [sell] => value
                                    [cost] => value
                                    [gain] => value
                                )
                        )

                    [user2] => Array
                        (
                            [0] => Array
                                (
                                    [sell] => value
                                    [cost] => value
                                    [gain] => value
                                )
                        )

                    [user3] => Array
                        (
                            [0] => Array
                                (
                                    [sell] => value
                                    [cost] => value
                                    [gain] => value
                                )
                        )
                )
            //... MORE WEEKS

        [1] => Array //REPRESENTS MONTH 2
        ( //... ALL THE PROCCES ABOVE
) 
我尝试每月和每周使用
foreach()
,如下所示:

$result = $array('sell' => 0, 'cost' => 0, 'gain' => 0);
foreach ($monthArray as $theMonth => $week){
    foreach ($week as $user){
        $result['sell'] +=  $user['user1'][0]['sell'];
        $result['sell'] +=  $user['user2'][0]['sell'];
        $result['sell'] +=  $user['user3'][0]['sell'];

        //...
但是,当我每个月打印
$result
他求和时,不是我想要的具体月份


我每周和每个月都要一笔钱。如何解决这个问题?

这个问题呢?:结果(
$sales
)是一个数组。这个数组的键是月份,数组的值是总数。通过迭代当月的周数,然后每周迭代用户数,即可获得总数。我自我介绍的后一个迭代,因为您使用的是这个硬编码的user1、user2、user3列表

您也可以立即回送或使用它,而不是将其存储在另一个阵列中,但我认为将其存储在阵列中更便于进一步处理。它稍微解开了你的代码

$result = $array('sell' => 0, 'cost' => 0, 'gain' => 0);
foreach ($monthArray as $theMonth => $week){
    $sales[$theMonth] = 0;
    foreach ($week as $users){
        foreach ($users as $user) {
            $sales[$theMonth] +=  $user[0]['sell'];
        }
    }
}

result['sell'] = $sales;
print_r(result['sell']);
如果您还想获得每月的成本和收益,那么以
$result[month]['sell']
的格式创建一个数组可能比
$result['sell'][month]
的格式创建一个数组更有意义,您可以尝试使用和。例如:这里:

//$array = your array
$sum_arr = array_reduce($array, function($old, $new){
    $arr = array_filter(array_map(function($v){ return is_array($v) ? $v : '';}, array_shift($new)));
    return [
        'sell' => array_sum(array_column($arr, 'sell')) + $old['sell'],
        'cost' => array_sum(array_column($arr, 'cost')) + $old['cost'],
        'gain' => array_sum(array_column($arr, 'gain')) + $old['gain'],
    ];
}, ['sell'=>0, 'cost'=>0, 'gain'=>0]);
更新:

array\u column()的替代方法


不需要使用循环。只有这段代码对于
$array
足够了,但是我的服务器php是PHP5.3。。。不工作
数组列()
:(
$sum_arr = array_reduce($array, function($old, $new){
    $arr = array_filter(array_map(function($v){ return is_array($v) ? $v : '';}, array_shift($new)));
    return [
        'sell' => array_sum(array_map(function($v){return $v['sell'];}, $arr)) + $old['sell'],
        'cost' => array_sum(array_map(function($v){return $v['cost'];}, $arr)) + $old['cost'],
        'gain' => array_sum(array_map(function($v){return $v['gain'];}, $arr)) + $old['gain'],
    ];
}, ['sell'=>0, 'cost'=>0, 'gain'=>0]);