2011-03-07 24 views
3

當數組1的值將會在偶數位置,而數組2會在奇數位置時,如何合併兩個數組?PHP ::當數組1的值將在偶數位置並且數組2將在奇數位置時如何合併2個數組?

實施例:

$arr1=array(11, 34,30); 
$arr2=array(12, 666); 
$output=array(11, 12, 34, 666,30); 
+1

如果$ arr1和$ arr2中有不同數量的元素會發生什麼情況 – 2011-03-07 11:32:19

+0

重複的[交錯多個數組到單個數組](http://stackoverflow.com/questions/1860490/interleaving-multiple-arrays-into-a-single-array) – 2011-03-07 11:35:34

+0

馬克,請參閱我的編輯輸出 – Yosef 2011-03-07 11:37:21

回答

3

這將正常工作,無論這兩個數組的長度,或者它們的鍵(它沒有索引它們):

$result = array(); 
while(!empty($arr1) || !empty($arr2)) { 
    if(!empty($arr1)) { 
     $result[] = array_shift($arr1); 
    } 
    if(!empty($arr2)) { 
     $result[] = array_shift($arr2); 
    } 
} 

編輯:我原來的答覆有一個bug;固定的。

+0

+1。我刪除了我的答案,就像你的答案一樣。 – Gaurav 2011-03-07 11:55:01

2

假定$ ARR1和$ ARR2大小相等的簡單枚舉陣列,或其中$ ARR2僅具有一個元素少於$ ARR1。

$arr1 = array(11, 34); 
$arr2 = array(12, 666); 
$output = array(); 
foreach($arr1 as $key => $value) { 
    $output[] = $value; 
    if (isset($arr2[$key])) { 
     $output[] = $arr2[$key]; 
    } 
} 
+0

This won如果第二個數組更長,或者數組沒有進行數字索引,那麼它就不起作用。 – Jon 2011-03-07 11:38:51

+0

@Jon - 我認爲我的答案的第一行實際上是這樣說的......關於「假設$ arr1和$ arr2是簡單枚舉的相同大小的數組,或者$ arr2只有一個元素少於$ arr1」 – 2011-03-07 11:40:50

+0

當然,我只是在看代碼:) – Jon 2011-03-07 11:43:18

1

通過與更多的項目陣列去,使用循環索引來訪問陣列,並將它們組合成所產生的一個嘀......

$longer = (count($arr1) > count($arr2) ? $arr1 : $arr2); 
$result = array(); 
for ($i = 0; $i < count($longer); $i++) { 
    $result[] = $arr1[i]; 
    if ($arr2[i]) { 
     $result[] = $arr2[i]; 
    } else { 
     $result[] = 0; // no item in arr2 for given index 
    } 
} 
2

試試這個

$arr1=array(11,34,30,35); 
$arr2=array(12,666,23); 

$odd= array_combine(range(0,2*count($arr1)-1,2), $arr1); 
$even = array_combine(range(1,2*count($arr2)-1,2), $arr2); 
$output=$odd+$even; 
ksort($output); 
echo "<pre>"; 
print_r($output); 

回報

Array 
(
    [0] => 11 
    [1] => 12 
    [2] => 34 
    [3] => 666 
    [4] => 30 
    [5] => 23 
    [6] => 35 
) 
+0

+!一個聰明的選擇 – 2011-03-07 12:06:27

相關問題