2009-12-07 16 views
7

Ich muss mehrere Arrays zu einem Array zusammenführen. Der beste Weg, um zu beschreiben, wonach ich suche, ist das "Verschachteln" der Arrays in ein einziges Array.Mehrere Arrays in ein Array verschachteln

Nehmen Sie zum Beispiel den ersten Teil von Array # 1 und hängen Sie ihn an das endgültige Array an. Holen Sie sich Element 1 aus Array 2 und fügen Sie es an das endgültige Array an. Erhalte Element 2 von Array # 1 und append ... etc.

Die endgültige Anordnung würde wie folgt aussehen:

Array # 1.element # 1 Array # 2.element # 1 . . .

Der "Kicker" ist, dass die einzelnen Arrays unterschiedlich lang sein können.

Gibt es eine bessere Datenstruktur?

+1

Bitte erläutern Sie weiter, wie Sie das Ergebnis erwarten, wenn die Arrays verschiedene Längen haben. Würden Sie das Interleaving stoppen, wenn eines der Arrays sein letztes Element erreicht hat oder möchten Sie, dass die verbleibenden Arrays weiter verschachtelt werden, bis alle Arrays ihr letztes Element erreicht haben? – Oskar

Antwort

25

zum Beispiel

function array_zip_merge() { 
    $output = array(); 
    // The loop incrementer takes each array out of the loop as it gets emptied by array_shift(). 
    for ($args = func_get_args(); count($args); $args = array_filter($args)) { 
    // &$arg allows array_shift() to change the original. 
    foreach ($args as &$arg) { 
     $output[] = array_shift($arg); 
    } 
    } 
    return $output; 
} 

// test 

$a = range(1, 10); 
$b = range('a', 'f'); 
$c = range('A', 'B'); 
echo implode('', array_zip_merge($a, $b, $c)); // prints 1aA2bB3c4d5e6f78910 
+0

Ich mag dieses. – Franz

+0

Tolles Stück Code sicher! Wenn jemand eine detaillierte Schritt-für-Schritt Erklärung benötigt, wie diese Funktion funktioniert, schaut euch [diesen Thread hier] an (http://stackoverflow.com/questions/34482028/explain-how-this-custom-function-works-php) :) – Acidon

1

Ich würde einfach array_merge() verwenden, aber das hängt natürlich davon ab, was genau Sie tun.

Dies würde diese Arrays aneinander anhängen, während Elemente nur dann ersetzt würden, wenn sie denselben nicht numerischen Schlüssel hätten. Und das mag für Sie kein Problem sein, oder es könnte aufgrund der Reihenfolge der Attribute gelöst werden, da der Inhalt der Elemente der ersten Arrays von den späteren überschrieben wird.

0

Wenn Sie n Arrays verwenden, können Sie eine SortedList verwenden und arrayIndex * n + arrayNumber als Sortierindex verwenden.

3

Wenn die einzigen Arrays numerischen Tasten haben, ist hier eine einfache Lösung:

$longest = max(count($arr1), count($arr2)); 
$final = array(); 

for ($i = 0; $i < $longest; $i++) 
{ 
    if (isset($arr1[$i])) 
     $final[] = $arr1[$i]; 
    if (isset($arr2[$i])) 
     $final[] = $arr2[$i]; 
} 

Wenn Sie Schlüssel benannt haben Sie die array_keys Funktion für jedes Array verwenden können und Schleife über das Array von Schlüsseln statt.

Wenn Sie mehr als zwei Arrays (oder eine variable Anzahl von Arrays) möchten, können Sie möglicherweise eine verschachtelte Schleife verwenden (obwohl ich denke, dass Sie $arr[0] und $arr[1] als die einzelnen Arrays benötigen).