合并,总结在PHP 2多维数组 [英] Merge and sum two multidimensional arrays in PHP

查看:121
本文介绍了合并,总结在PHP 2多维数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要一种方法来合并多个阵列(大概在8)和总结的重复键或子键。

例如:

  $ ARR1 =阵列(
    星期五=>阵列(
        早餐=> 32,
        午餐=> 45
    )
    星期日=>阵列(
        午餐=> 12
    )
);$ ARR2 =阵列(
    星期日=>阵列(
        早餐=> 7,
        午餐=> 3
    )
    星期一=>阵列(
        早餐=> 12
    )
);$ ARR3 =阵列(
    星期一=>阵列(
        早餐=> 31
    )
);

和输出应该是这样的:

  $ =总阵列(
    星期五=>阵列(
        早餐=> 32,
        午餐=> 45
    )
    星期日=>阵列(
        早餐=> 19,
        午餐=> 15
    )
    星期一=>阵列(
        早餐=> 43
    )
);

我怎么能结合吗?我试过用

  array_map()

但是,这似乎失败,多维数组这样。使用也试过

  forEach()这样

但得到了pretty费解。

下面是我的尝试:

  $ =总array_map(函数($ ARR1,$ ARR2,$ ARR3){
    回报($ ARR1 + $ ARR2 + $ ARR3);
} $ ARR1,$ ARR2,$ ARR3);


解决方案

尝试这种解决方案。您可以添加阵列中的任何计数。但请名称作为$ arr1- $ maxArraysCount

  $ ARR1 =阵列(
    星期五=>阵列(
        早餐=> 32,
        午餐=> 45
    )
    星期日=>阵列(
        午餐=> 12
    )
);$ ARR2 =阵列(
    星期日=>阵列(
        早餐=> 7,
        午餐=> 3
    )
    星期一=>阵列(
        早餐=> 12
    )
);$ ARR3 =阵列(
    星期一=>阵列(
        早餐=> 31
    )
);
$ maxArraysCount = 8;
$收益率=阵列();
为($ i = 1; $ I< $ maxArraysCount; $ I ++){
    $常用3 ='改编'。 $ I;
    如果(使用isset(ARR $$)及和放大器; is_array($$ ARR)){
        的foreach(ARR $$作为$天=> $值){
            的foreach($值$吃=> $计数){
                如果(使用isset($返回[$日] [$吃])!)$返回[$日] [$吃] = 0;
                $返回[$日] [$吃] = $计数+ $返回[$日] [$吃];
            }
        }
    }
}回声< pre>中;的print_r($返程);

下面是输出:

 阵列

    [周五] =>排列
        (
            [早餐] => 32
            [午餐] => 45
        )    [日] =>排列
        (
            [午餐] => 15
            [早餐] => 7
        )    [周一] =>排列
        (
            [早餐] => 43
        ))

I'm needing a way to merge several arrays ( probably around 8 ) and sum any duplicate keys or sub-keys.

For example:

$arr1 = array(
    "Friday" => array(
        "Breakfast" => 32,
        "Lunch" => 45
    ),
    "Sunday" => array(
        "Lunch" => 12
    )
);

$arr2 = array(
    "Sunday" => array(
        "Breakfast" => 7,
        "Lunch" => 3
    ),
    "Monday" => array(
        "Breakfast" => 12
    )
);

$arr3 = array(
    "Monday" => array(
        "Breakfast" => 31
    )
);

And the output should be something like this:

$total = array(
    "Friday" => array(
        "Breakfast" => 32,
        "Lunch" => 45
    ),
    "Sunday" => array(
        "Breakfast" => 19,
        "Lunch" => 15
    ),
    "Monday" => array(
        "Breakfast" => 43
    )
);

How could I combine this? I've tried using

array_map()

But that seemed to fail with multidimensional arrays like this. Also tried using

Foreach()

but that got pretty convoluted.

Here's my attempt:

$total = array_map( function( $arr1, $arr2, $arr3 ){
    return( $arr1 + $arr2 + $arr3 );
}, $arr1, $arr2, $arr3 );

解决方案

Try this solution. You can add any count of arrays. But keep names as $arr1-$maxArraysCount

$arr1 = array(
    "Friday" => array(
        "Breakfast" => 32,
        "Lunch" => 45
    ),
    "Sunday" => array(
        "Lunch" => 12
    )
);

$arr2 = array(
    "Sunday" => array(
        "Breakfast" => 7,
        "Lunch" => 3
    ),
    "Monday" => array(
        "Breakfast" => 12
    )
);

$arr3 = array(
    "Monday" => array(
        "Breakfast" => 31
    )
);


$maxArraysCount = 8;
$return = array();
for($i = 1; $i < $maxArraysCount; $i++){
    $arr = 'arr' . $i;
    if(isset($$arr) && is_array($$arr)){
        foreach ($$arr as $day => $value) {
            foreach ($value as $eat => $count) {
                if(!isset($return[$day][$eat])) $return[$day][$eat] = 0;
                $return[$day][$eat] = $count + $return[$day][$eat];
            }
        }
    }
}

echo "<pre>";print_r($return);

Here is output:

Array
(
    [Friday] => Array
        (
            [Breakfast] => 32
            [Lunch] => 45
        )

    [Sunday] => Array
        (
            [Lunch] => 15
            [Breakfast] => 7
        )

    [Monday] => Array
        (
            [Breakfast] => 43
        )

)

这篇关于合并,总结在PHP 2多维数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆