合并和求和多维多维关联数组 [英] Merge and sum multiple multidimensional associative arrays

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

问题描述

我需要一种方法来合并几个数组(大概8个左右),并对所有重复的键或子键求和.

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

例如:

$arr1 = [
    "Friday" => ["Breakfast" => 32, "Lunch" => 45],
    "Sunday" => ["Lunch" => 12]
];

$arr2 = [
    "Sunday" => ["Breakfast" => 7, "Lunch" => 3],
    "Monday" => ["Breakfast" => 12]
];

$arr3 = [
    "Monday" => ["Breakfast" => 31]
];

输出应该是这样的:

array (
  'Friday' => 
  array (
    'Breakfast' => 32,
    'Lunch' => 45,
  ),
  'Sunday' => 
  array (
    'Lunch' => 15,
    'Breakfast' => 7,
  ),
  'Monday' => 
  array (
    'Breakfast' => 43,
  ),
);

我该如何结合呢?我尝试使用 array_map().

How could I combine this? I've tried using array_map().

但是对于像这样的多维数组,这似乎失败了.还尝试过使用 foreach(),但结果令人费解.

But that seemed to fail with multidimensional arrays like this. Also tried using foreach(), but that got pretty convoluted.

这是我的尝试:

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

推荐答案

尝试此解决方案.您可以添加任意数量的数组.但是将名称保留为$ arr1- $ maxArraysCount

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);

此处输出:

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

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

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

)

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

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