简体   繁体   English

PHP关联数组合并键

[英]PHP Associative Array Merge On Key

I am working to combine the following arrays: 我正在努力结合以下阵列:

Array #1 数组#1

[0] => Store1
[1] => Array (
[ytd] => Array (
    [newups] => 1837
    [usedups] => 1777
    [totalups] => 3614
    [totalsales] => 1446
    )
[prevyear] => Array (
    [newups] => 262
    [usedups] => 281
    [totalups] => 543
    [totalsales] => 240
    )
[prevmonth] => Array (
    [goals] => Array (
        [jangoal] => 236
        [febgoal] => 224
        [margoal] => 243
        [aprgoal] => 218
        [maygoal] => 221
        [jungoal] => 239
        [julgoal] => 241
        [auggoal] => 0
        )
    [ups] => Array (
        [newups] => Array (
            [2016-01] => 193
            [2016-02] => 0
            [2016-03] => 0
            [2016-04] => 0
            [2016-05] => 0
            [2016-06] => 0
            [2016-07] => 0
            [2016-08] => 0
            )
        )
    )
[year] => 2016
[month] => September
[goalsales] => 197
[daily] => Array (
    [ups] => Array (
        [2016-09-01] => 18
        [2016-09-02] => 0
        [2016-09-03] => 0
        [2016-09-04] => 0
        [2016-09-05] => 0
        [2016-09-06] => 0
        [2016-09-07] => 0
        [2016-09-08] => 0
        [2016-09-09] => 0
        [2016-09-10] => 0
        [2016-09-11] => 0
        [2016-09-12] => 0
        [2016-09-13] => 0
        [2016-09-14] => 0
        [2016-09-15] => 0
        )
    [sold] => Array (
        [2016-09-01] => 4
        [2016-09-02] => 0
        [2016-09-03] => 0
        [2016-09-04] => 0
        [2016-09-05] => 0
        [2016-09-06] => 0
        [2016-09-07] => 0
        [2016-09-08] => 0
        [2016-09-09] => 0
        [2016-09-10] => 0
        [2016-09-11] => 0
        [2016-09-12] => 0
        [2016-09-13] => 0
        [2016-09-14] => 0
        [2016-09-15] => 0
        )
    )
)

Array #2 阵列#2

[2] => Store2
[3] => Array (
[ytd] => Array (
    [newups] => 626
    [usedups] => 568
    [totalups] => 1194
    [totalsales] => 419
    )
[prevyear] => Array (
    [newups] => 96
    [usedups] => 102
    [totalups] => 198
    [totalsales] => 81
    )
[prevmonth] => Array (
    [goals] => Array (
        [jangoal] => 68
        [febgoal] => 70
        [margoal] => 75
        [aprgoal] => 71
        [maygoal] => 69
        [jungoal] => 75
        [julgoal] => 91
        [auggoal] => 0
        )
    [ups] => Array (
        [newups] => Array (
            [2016-01] => 52
            [2016-02] => 0
            [2016-03] => 0
            [2016-04] => 0
            [2016-05] => 0
            [2016-06] => 0
            [2016-07] => 0
            [2016-08] => 0
            )
        )
    )
[year] => 2016
[month] => September
[goalsales] => 66
[daily] => Array (
    [ups] => Array (
        [2016-09-01] => 8
        [2016-09-02] => 0
        [2016-09-03] => 0
        [2016-09-04] => 0
        [2016-09-05] => 0
        [2016-09-06] => 0
        [2016-09-07] => 0
        [2016-09-08] => 0
        [2016-09-09] => 0
        [2016-09-10] => 0
        [2016-09-11] => 0
        [2016-09-12] => 0
        [2016-09-13] => 0
        [2016-09-14] => 0
        [2016-09-15] => 0
        )
    [sold] => Array (
        [2016-09-01] => 7
        [2016-09-02] => 0
        [2016-09-03] => 0
        [2016-09-04] => 0
        [2016-09-05] => 0
        [2016-09-06] => 0
        [2016-09-07] => 0
        [2016-09-08] => 0
        [2016-09-09] => 0
        [2016-09-10] => 0
        [2016-09-11] => 0
        [2016-09-12] => 0
        [2016-09-13] => 0
        [2016-09-14] => 0
        [2016-09-15] => 0
        )
    )
)

The goal is to end up with a combined array (like the example below) in which both arrays have been combined recursively to maintain the array key structure, but return the sum of values: 目标是最终得到一个组合数组(如下面的示例),其中两个数组都已递归组合以维护数组键结构,但返回值的总和:

Combined Array 组合阵列

[1] => Array (
[ytd] => Array (
    [newups] => 2463
    [usedups] => 2354
    [totalups] => 4808
    [totalsales] => 1865
    )
[prevyear] => Array (
    [newups] => 358
    [usedups] => 383
    [totalups] => 543
    [totalsales] => 240
    )
[prevmonth] => Array (
    [goals] => Array (
        [jangoal] => 236
        [febgoal] => 224
        [margoal] => 243
        [aprgoal] => 218
        [maygoal] => 221
        [jungoal] => 239
        [julgoal] => 241
        [auggoal] => 0
        )
    [ups] => Array (
        [newups] => Array (
            [2016-01] => 193
            [2016-02] => 0
            [2016-03] => 0
            [2016-04] => 0
            [2016-05] => 0
            [2016-06] => 0
            [2016-07] => 0
            [2016-08] => 0
            )
        )
    )
[year] => 2016
[month] => September
[goalsales] => 197
[daily] => Array (
    [ups] => Array (
        [2016-09-01] => 18
        [2016-09-02] => 0
        [2016-09-03] => 0
        [2016-09-04] => 0
        [2016-09-05] => 0
        [2016-09-06] => 0
        [2016-09-07] => 0
        [2016-09-08] => 0
        [2016-09-09] => 0
        [2016-09-10] => 0
        [2016-09-11] => 0
        [2016-09-12] => 0
        [2016-09-13] => 0
        [2016-09-14] => 0
        [2016-09-15] => 0
        )
    [sold] => Array (
        [2016-09-01] => 4
        [2016-09-02] => 0
        [2016-09-03] => 0
        [2016-09-04] => 0
        [2016-09-05] => 0
        [2016-09-06] => 0
        [2016-09-07] => 0
        [2016-09-08] => 0
        [2016-09-09] => 0
        [2016-09-10] => 0
        [2016-09-11] => 0
        [2016-09-12] => 0
        [2016-09-13] => 0
        [2016-09-14] => 0
        [2016-09-15] => 0
        )
    )
)

I have tried to following code, but the output does not return the expected values: 我尝试执行以下代码,但是输出未返回预期值:

foreach ($array as $value){
  $id = $value[];
   if ( !isset($output[$id]) ) {
     $output[$id] = array();
   }
   $output[$id] = array_merge($output[$id], $value);
}

Any help would be appreciated. 任何帮助,将不胜感激。

if i understand your question correctly, then this is how you can combine your arrays: 如果我正确理解了您的问题,那么这就是如何组合数组的方法:

function merge($arr1, $arr2)
{
    $arr = [];

    foreach ($arr1 as $key => $value) {
        if (is_array($arr1[$key])) {
            $arr[$key] = merge($arr1[$key], $arr2[$key]);
        } else {
            $arr[$key] = $arr1[$key] + $arr2[$key];
        }
    }

    return $arr;
}

You might want to use the function array_merge_recursive to merge the 2 arrays. 您可能要使用函数array_merge_recursive合并两个数组。

$newarray = array_merge_recursive($array1, $array2);

Then you need to go through your new array and search recursively the key 0 and 1, and add their values. 然后,您需要遍历新数组并递归搜索键0和1,并添加它们的值。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM