2016-09-02 2 views
0

Я работаю, чтобы объединить следующие массивы:PHP ассоциативного массива Объединить Key

Массив # 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 
     ) 
    ) 
) 

Массив # 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 
     ) 
    ) 
) 

Цель состоит в том, чтобы в конечном итоге с объединенный массив (как пример ниже), в котором оба массива были объединены рекурсивно для поддержания структуры ключа массива, но возвращают сумму значений:

Комбинированный массив

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

Я попытался следующий код, но выход не возвращает ожидаемые значения:

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

Любая помощь будет оценена.

+0

Вы пробовали array_merge_recursive? http://php.net/manual/en/function.array-merge-recursive.php – Lynne

+0

Возможный дубликат [Array merge on key из двух ассоциативных массивов в php?] (http://stackoverflow.com/questions/9112920/array-merge-on-key-of-two-associative-arrays-in-php) –

ответ

1

, если я правильно понимаю ваш вопрос, то это, как вы можете объединить массивы:

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; 
} 
-1

Вы можете использовать функцию array_merge_recursive, чтобы объединить 2 массива.

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

Затем вам нужно пройти через ваш новый массив и рекурсивно найти ключи 0 и 1 и добавить их значения.

+0

Это не добавит значения, когда один и тот же ключ существует в обоих массивах, он просто будет использовать одно из значений. – Barmar

+0

«Если массивы имеют один и тот же цифровой ключ, более позднее значение не будет перезаписывать исходное значение, но будет добавлено». Так что нет перезаписи. Таким образом, вы можете суммировать 2 на следующем процессе. – delpi

+0

Мне кажется, что «следующий процесс» - это часть, которую он не знает, как это сделать. – Barmar

Смежные вопросы