2017-06-17 8 views
2

私は、整数またはそれ以上の配列(それ自身は整数を含む)を含むことができる2つの配列をマージ/合計しようとしています。merge/sum多次元配列php

値が整数の場合、最終配列でそれらを合計する必要があります。 値が配列の場合は、値をループして最終配列で合計する必要があります。

値またはサブ配列が基本配列の1つにのみ存在する場合は、最終配列のサブ配列に追加する必要があります。 (これは私が行うことができないものです)。)

私の配列は、このようなものです:

ARRAY 1 
[1466859600] => Array 
    (
     [TOTAL] => 27217 
     [AAA] => Array 
      (
       [FD_CDP] => 1746 
       [LO_SC_MIC] => 4654 
       [FD_ATS] => 893 
       [CDP] => 40 
       [SUPERVISION] => 9 
       [CONTROL] => 4 
       [ATS] => 4 
       [EVT_ACK] => 3 
      ) 

     [BBB] => Array 
      (
       [FD_CDP] => 1376 
       [LO_SC_MIC] => 4606 
       [FD_ATS] => 826 
       [FD_ATSS] => 451 
       [LO_SFRC] => 4 
       [FD_S2] => 259 
       [2_LOSC] => 2 
      ) 

     [CCC] => Array 
      (
       [FD_CDP] => 1333 
       [LO_SC_MIC] => 4725 
       [FD_ATS] => 856 
       [CONTROL] => 4 
       [ATS] => 2 
       [EVT_ACK] => 5 
      ) 

ARRAY 2 
    [1466859600] => Array 
    (
     [TOTAL] => 95406 
     [AAA] => Array 
      (
       [FD_ATSS] => 1719 
       [LO_SC_MIC] => 16830 
       [CONTROL] => 16 
       [NEW] => 7 
       [NOEL] => 206 
      ) 

     [BBB] => Array 
      (
       [SUPERVISION] => 23 
       [CDP] => 158 
       [CONTROL] => 40 
       [2_LOSC] => 14 
       [ATS] => 6 
       [EVT_ACK] => 4 
      ) 

     [CCC] => Array 
      (
       [EVT_ACK] => 167 
       [LO_SFRC] => 248 
       [SUPERVISION] => 23 
    ) 

私はこのような機能を書いた:

function sumArrayValues($array1, $array2) 
     { 
      foreach ($array1 as $key => $value) 
      { 

       if (is_array($array1[$key])) 
        { 
         echo "it's an array\n I need to reloop\n"; 
         sumArrayValues($array1[$key], $array2[$key]); 
        } 
       else 
        { 
         echo "FIRST VALUE TO SUM\n"; 
         print_r($array1[$key]."\n"); 
         echo "SECOND VALUE TO SUM\n"; 
         print_r($array2[$key]."\n"); 
         $array1[$key] = (int)$array1[$key] +(int)$array2[$key]; 
         echo "--------RESULT of SUM array1&2----------\n"; 
        } 
      } 
     return $array1; 

     } 

しかし、この機能はしていませんサブ配列が同じ順序でない場合、サブ配列または値が2番目の配列にのみ存在する場合は、2つのケース(およびそれ以上)を考慮します。

関数の例は良い助けになりますが、より基本的なレベルでは、私もそれを行うアルゴリズムを理解することができません。 アイデア

+0

この5月には役立ちます、[マージされた値を合計することにより、2つの配列をマージする方法](https://stackoverflow.com/a/6086409/6521116) –

答えて

0

foreachループの場合、get all the keyslive demoとすることができます。

メモアレイのキーが未定義であるかどうかを確認して、キーの定義済みの値を保存することもできます。

function sumArrayValues($array1, $array2) 
{ 
    $keys = array_keys($array1 + $array2); 
    foreach ($keys as $key) 
    { 
     if (is_array($array1[$key]) || is_array($array2[$key])) 
      $array1[$key] = sumArrayValues($array1[$key], $array2[$key]); 
     else 
      @$array1[$key] = (int)$array1[$key] +(int)$array2[$key]; 
    } 
    return $array1; 
} 
+1

あなたの例では、とき$ arrayX [$キーを除いて、素晴らしい作品]はNULLなので、存在しないときに配列を作成する関数の先頭に条件を追加しなければなりませんでした。 –