2017-08-10 1 views
-6

Hallo, ich habe folgende Array i unten Liste konvertieren in neue Reihe von Liste basiert auf Indizes ... wie horizontalen in die vertikale WeiseMerge-Array in

mainArray['a'] = [1,2,3,4]; 
mainArray['b'] = [4,5,6,7]; 
mainArray['c'] = [7,8,9,10]; 
mainArray['d'] = [10,11,12,13]; 

ich kurz opration müssen es machen wie

[1,4,7,10][2,5,8,11][3,6,9,12][4,7,10,13] 
+1

Was Sie bisher versucht haben? Und welche Art von Struktur ist das Ergebnis? Ein Faden? – tima

+0

Willkommen bei SO. Bitte lesen Sie: [Wie erstellt man ein minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve) und auch [Wie stelle ich eine gute Frage?] (Http://stackoverflow.com/ help/how-to-ask) –

+0

Es kann getan werden, indem man mainArray doppelt iteriert, aber ich möchte nicht doppelt iterieren, gibt es einen einfachen Weg, um 4 separate Array zu machen (vertikale Zusammenführung) –

Antwort

0

Dies ist wahrscheinlich das, was Sie suchen:

<?php 
$input = [ 
    'a' => [1,2,3,4], 
    'b' => [4,5,6,7], 
    'c' => [7,8,9,10], 
    'd' => [10,11,12,13] 
]; 
$output = []; 
array_walk($input, function($entry) use (&$output) { 
    foreach ($entry as $key=>$val) { 
     $output[$key][] = $val; 
    } 
}); 
print_r($output); 

eine Alternative ein konservativer sein würde Iteration (Ich halte es für hässlich aus verschiedenen Gründen):

<?php 
$input = [ 
    'a' => [1,2,3,4], 
    'b' => [4,5,6,7], 
    'c' => [7,8,9,10], 
    'd' => [10,11,12,13] 
]; 
$output = []; 
for ($i=0; $i<count($input['a']); $i++) { 
    $output[] = array_column($input, $i); 
} 
print_r($output); 

Die Ausgabe des obigen Codes ist:

Array 
(
    [0] => Array 
     (
      [0] => 1 
      [1] => 4 
      [2] => 7 
      [3] => 10 
     ) 

    [1] => Array 
     (
      [0] => 2 
      [1] => 5 
      [2] => 8 
      [3] => 11 
     ) 

    [2] => Array 
     (
      [0] => 3 
      [1] => 6 
      [2] => 9 
      [3] => 12 
     ) 

    [3] => Array 
     (
      [0] => 4 
      [1] => 7 
      [2] => 10 
      [3] => 13 
     ) 

)