2017-04-25 32 views
0

是否有一個本地PHP函數來壓縮合並兩個數組?PHP:array_merge()以替代順序(zip順序)?

請看下面的例子:

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

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

這將產生:

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" 
} 

不過,我想:

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我寫我自己 - 測試的工作 - 功能:

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; 
} 

然而,是否有一個本地PHP函數來合併這樣的數組(也許更高性能)?是否有一個原生的PHP函數用於保存密鑰但保持順序?沒有找到......:/

+2

一個不錯的小傢伙班輪你:'的var_dump(array_merge(... array_map(NULL,... [$ a,$ b,$ c])));'需要PHP> = 5.6.0 –

+1

請參閱:http://stackoverflow.com/q/797251/3933332一些想法 – Rizier123

+0

謝謝@MarkBaker我從這個答案。 – Blackbam

回答

0

這個目的沒有PHP本機功能。然而,根據@馬克·貝克的評論有實現這個很短的可能性:

$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));