2016-09-02 4 views
0

Je travaille à combiner les tableaux suivants:Tableau Associatif PHP fusion sur clé

Tableau # 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 
     ) 
    ) 
) 

Tableau # 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 
     ) 
    ) 
) 

L'objectif est de se retrouver avec une tableau combiné (comme l'exemple ci-dessous) dans lequel les deux tableaux ont été combinés récursivement pour maintenir la structure de clé de tableau, mais retourner la somme des valeurs:

tableau combiné

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

J'ai essayé de code suivant, mais la sortie ne renvoie pas les valeurs attendues:

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

Toute aide serait appréciée.

+0

Avez-vous essayé array_merge_recursive? http://php.net/manual/en/function.array-merge-recursive.php – Lynne

+0

Copie possible de [Array merge sur la clé de deux tableaux associatifs en php?] (http://stackoverflow.com/questions/9112920/array-merge-on-key-de-two-associative-arrays-in-php) –

Répondre

1

si je comprends bien votre question, alors voici comment vous pouvez combiner vos tableaux:

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

Vous pouvez utiliser la fonction array_merge_recursive pour fusionner les 2 tableaux. Ensuite, vous devez parcourir votre nouveau tableau et rechercher récursivement la clé 0 et 1, et ajouter leurs valeurs.

+0

Cela n'ajoutera pas les valeurs quand la même clé existe dans les deux tableaux, elle utilisera simplement l'une des valeurs. – Barmar

+0

"Si les tableaux ont la même clé numérique, la valeur ultérieure ne remplacera pas la valeur d'origine, mais sera ajoutée." Il n'y a donc pas d'écrasement. De cette façon, vous pouvez additionner les 2 sur le processus suivant. – delpi

+0

Il me semble que "le prochain processus" est la partie qu'il ne sait pas comment faire. – Barmar