2017-02-02 2 views
0

Ich habe zwei Arrays assoziativer Arrays mit unterschiedlichen Schlüsseln. Ich muss sie zu einem einzigen Array von assoziativen Arrays verschmelzen, mit Nullen oder leeren Strings für Schlüssel, die bei höheren Indizes nicht existieren. Zum Beispiel:Zusammenführen von Arrays assoziativer Arrays mit leeren String-Werten für fehlende Schlüssel

$first = array(array('x'=>'1','y'=>'2')); 
$second = array(array('z'=>'3'),array('z'=>'4')); 

Das Ergebnis sollte wie folgt aussehen:

$result = array(
    array(
     'x'=>'1', 
     'y'=>'2', 
     'z'=>'3' 
     ), 
    array(
     'x'=>'', 
     'y'=>'', 
     'z'=>'4' 
     ) 
    ); 

Die Funktion, die diese Arrays muss verschmilzt in der Lage sein zu handhaben zwei oder mehr Arrays. Hier ist, was ich kam mit:

// allArrays can be many arrays of all sizes and will be different each time this process runs 
$allArrays = array($first, $second); 
$longestArray = max($allArrays); 
$data = array(); 
for($i = 0; $i < count($longestArray); ++$i) { 
    $dataRow = array(); 
    foreach ($allArrays as $currentArray) { 
     if (isset($currentArray[$i])) { 
      foreach ($currentArray[$i] as $key => $value) { 
       $dataRow[$key] = $value; 
      } 
     } else { 
      foreach ($currentArray[0] as $key => $value) { 
       $dataRow[$key] = ''; 
      } 
     }     
    } 
    $data[] = $dataRow; 
} 

Es funktioniert, aber ich denke, die verschachtelte for-Schleifen schlechte Leistung auf großen Feldern verursachen, und es ist ziemlich unleserlich. Gibt es einen besseren Weg, dieses Problem anzugehen?

+0

Es gibt mehrere integrierte Funktionen des Arrays, die helfen könnten und Ihr Leben ein bisschen einfacher machen, überprüfen Sie sie in der Anleitung. –

+0

Haben Sie sich http://php.net/manual/en/function.array-merge-recursive.php –

+0

@SanderBackus angeschaut, seine Ergebnisse sind komplexer als array_merge_recursive PHP-Funktionen Ergebnisse –

Antwort

0

Leider sieht es so aus, als wäre dies der beste Weg, um dieses Problem zu lösen. Ich werde die Frage mit dem Beispiel von oben beantworten, falls es jemandem in der Zukunft hilft.

// allArrays can be many arrays of all sizes and will be different each time this process runs 
$allArrays = array($first, $second); 
$longestArray = max($allArrays); 
$data = array(); 
for($i = 0; $i < count($longestArray); ++$i) { 
    $dataRow = array(); 
    foreach ($allArrays as $currentArray) { 
     if (isset($currentArray[$i])) { 
      foreach ($currentArray[$i] as $key => $value) { 
       $dataRow[$key] = $value; 
      } 
     } else { 
      foreach ($currentArray[0] as $key => $value) { 
       $dataRow[$key] = ''; 
      } 
     }     
    } 
    $data[] = $dataRow; 
} 
Verwandte Themen