2014-09-04 22 views
1

我想採取這樣的數組,並將其組合成一個單一的數組。如何結合與PHP交錯的數組

array (size=2) 
    0 => 
     array (size=10) 
     0 => string '1' 
     1 => string 'a' 
     2 => string '3' 
     3 => string 'c' 
    1 => 
     array (size=5) 
     0 => string '2' 
     1 => string 'b' 

但是我希望數組結果是交錯的。

所以它最終會看起來像

array 
    0 => '1' 
    1 => '2' 
    2 => 'a' 
    3 => 'b' 
    4 => '3' 
    5 => 'c' 

我想它,這樣也無所謂多少初始密鑰的傳遞(這其中有2),它應該有1工作,2或者5.另外,從我的例子中可以看出,最有可能的元素數量不匹配。

任何人都知道完成此任務的最佳方法?

+0

數組鍵會匹配還是可以完全隨機?例如'[1,'a',3,'c']'和'[17 => 2,9 =>'b']'?所得到的索引必須是順序的?初始密鑰究竟是什麼意思?它看起來像你想轉置矩陣(切換列和行)這是稀疏的人口。 – knittl 2014-09-04 15:26:59

+2

我會建議至少嘗試一下,而不是扁平的要求代碼 – ElefantPhace 2014-09-04 15:28:14

+0

@Keith:這有幫助嗎? http://stackoverflow.com/questions/797251/transposing-multidimensional-arrays-in-php – knittl 2014-09-04 15:32:48

回答

5
$data = array(
    0 => array(
     0 => '1', 
     1 => 'a', 
     2 => '3', 
     3 => 'c', 
    ), 
    1 => array(
     0 => '2', 
     1 => 'b', 
    ), 
); 

$newArray = array(); 
$mi = new MultipleIterator(MultipleIterator::MIT_NEED_ANY); 
$mi->attachIterator(new ArrayIterator($data[0])); 
$mi->attachIterator(new ArrayIterator($data[1])); 
foreach($mi as $details) { 
    $newArray = array_merge(
     $newArray, 
     array_filter($details) 
    ); 
} 
var_dump($newArray); 
+0

另一個很好的例子,顯示了PHP4和PHP5之間的區別;開發者和專家之間的區別,他們跟上語言的進展。 – DanFromGermany 2014-09-04 15:56:05

0

試圖想一個有趣的解決方案:

$array = [ 
    ["a","b","c"], 
    ["d","e"] 
]; 
$result = []; 
while($array) { 
    array_walk(
     $array, 
     function(&$subarray, $key) use (&$array, &$result) { 
      $result[] = array_shift($subarray); 
      if(empty($subarray)) unset ($array[$key]); 
     } 
    ); 
} 

var_dump($result); 

它雖然破壞了原有的陣列。

0

我很喜歡這個......所以,如果你喜歡它使用它!

$arr1 = [1,'a',3,'c']; 
$arr2 = ['2','b']; 

$finarry = arrayInterweave($arr1,$arr2); 
print_r($finarry); 

function arrayInterweave($arr1,$arr2){ 
    $count1 = count($arr1); 
    $count2 = count($arr2); 
    $length = (($count1 >= $count2) ? $count1 : $count2); 

    $fin = array(); 
    for($i = 0;$i<$length;$i++){ 
     if(!empty($arr1[$i])){ 
     $fin[] = $arr1[$i]; 
     } 
     if(!empty($arr2[$i])){ 
     $fin[] = $arr2[$i]; 
     } 
    } 
    return $fin; 
} 
+0

也用較長的第二個字符串'$ arr2 = ['2','b',12,3123,2191,22,11,'a'];' – 2014-09-04 15:36:28

+0

'進行測試請注意,它是一個可變數量的多維數組,而不是兩個數組。 – 2014-09-04 15:37:37

+0

是的...其實只是意識到,因爲我沒有注意。我會看看我能否修復它。但是如果有人提交的東西比我可能會修復我的更好! – 2014-09-04 15:39:07