2017-06-17 10 views
2

Ich versuche zu verschmelzen/summiert 2 Arrays, die ganze Zahlen oder mehrere Arrays enthalten können (sie enthalten Integer).merge/sum multidimensionales Array php

Wenn die Werte ganze Zahlen sind, muss ich sie im endgültigen Array summieren. Wenn die Werte Arrays sind, muss ich die Werte durchlaufen und sie im endgültigen Array summieren.

Wenn ein Wert oder ein Sub-Array nur in 1 des Basis-Arrays vorhanden ist, muss es im Sub-Array des endgültigen Arrays hinzugefügt werden. (Dies ist, was kann ich nicht tun) ..)

Meine Arrays sind wie folgt aus:

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 
    ) 

Ich schrieb eine Funktion wie folgt aus:

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; 

     } 

Aber diese Funktion nicht Berücksichtigen Sie 2 (und wahrscheinlich mehr) Fälle: wenn das Sub-Array nicht in der gleichen Reihenfolge ist, wenn ein Sub-Array oder ein Wert nur im zweiten Array existiert.

Ein Beispiel für die Funktion wäre eine gute Hilfe, aber auf einer grundlegenderen Ebene, ich kann sogar nicht den Algorithmus, um dies zu tun. Irgendwelche Ideen?

+0

Dies kann helfen, [Wie zwei Arrays zu verbinden, indem die fusionierten Werte summiert] (https://stackoverflow.com/a/6086409/6521116) –

Antwort

0

Sie können get all the keys für die foreach-Schleife, live demo.

Hinweis, Sie können auch überprüfen, ob ein Schlüssel eines Arrays nicht definiert ist, und dann den definierten Wert für den Schlüssel speichern.

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

Ihr Beispiel funktioniert gut, außer wenn $ ARRAYx [$ key ] ist NULL, also musste ich eine Bedingung am Anfang der Funktion hinzufügen, die Arrays erstellt, wenn sie nicht existieren. –

Verwandte Themen