2017-04-25 1 views
0

Gibt es eine native PHP-Funktion, um zwei Arrays zip zusammenzuführen?PHP: array_merge() in alternativer Reihenfolge (zip-Reihenfolge)?

Schauen Sie sich das folgende Beispiel:

$a = array("a","b","c"); 
$b = array("d","e","f"); 
$c = array("g","h","i"); 

var_dump(array_merge($a,$b,$c)); 

Dies erzeugt:

array(9) { 
    [0]=> 
    string(1) "a" 
    [1]=> 
    string(1) "b" 
    [2]=> 
    string(1) "c" 
    [3]=> 
    string(1) "d" 
    [4]=> 
    string(1) "e" 
    [5]=> 
    string(1) "f" 
    [6]=> 
    string(1) "g" 
    [7]=> 
    string(1) "h" 
    [8]=> 
    string(1) "i" 
} 

aber ich will:

array(9) { 
    [0]=> 
    string(1) "a" 
    [1]=> 
    string(1) "d" 
    [2]=> 
    string(1) "g" 
    [3]=> 
    string(1) "b" 
    [4]=> 
    string(1) "e" 
    [5]=> 
    string(1) "h" 
    [6]=> 
    string(1) "c" 
    [7]=> 
    string(1) "f" 
    [8]=> 
    string(1) "i" 
} 

Therfore schrieb ich mein eigenes - eine Arbeits getestet - Funktion:

function array_zip(...$arrays) { 
    $res = array(); 

    while(true) { 
     $check_finish = true; 
     foreach($arrays as $array) { 
      if(!empty($array)) { 
       $check_finish = false; 
      } 
     } 

     if($check_finish) { 
      break; 
     } else { 

      foreach($arrays as $key => $array) { 
       if(!empty($array)) { 
        array_push($res,array_shift($array)); 
        $arrays[$key] = $array; 
       } 
      } 
     } 
    } 

    return $res; 
} 

Gibt es jedoch eine native PHP-Funktion, um solche Arrays zusammenzufassen (vielleicht leistungsfähiger)? Und gibt es zu diesem Zweck eine native PHP-Funktion, die Schlüssel beibehält, aber die Reihenfolge beibehält? Nicht gefunden: -/

+2

Ein netter kleiner Einzeiler für Sie: 'var_dump (array_merge (... array_map (null, ... [$ a, $ b, $ c]))); 'erfordert PHP> = 5.6.0 –

+1

Siehe: http://Stackoverflow.com/q/797251/3933332 für einige Ideen – Rizier123

+0

Dank @MarkBaker Ich habe eine Antwort von diesem gemacht. – Blackbam

Antwort

0

Es gibt keine native PHP-Funktion für diesen Zweck. Doch nach dem Kommentar von @ Mark Baker gibt es eine kurze Möglichkeit, dies umzusetzen:

$a = array("a","b","c"); 
$b = array("d","e","f"); 
$c = array("g","h","i"); 

function array_zip(...$arrays) { 
    return array_merge(...array_map(null, ...$arrays)); 
} 

var_dump(array_zip($a,$b,$c)); 
Verwandte Themen