2012-08-06 94 views
2

假設我有兩個數組:合併兩個數組,合併排序風格

$a1 = array(0,1,2); 
$a2 = array(3,4,5); 

我希望能夠做到這一點交替的陣列,而不是concatanate它們合併。我想這樣的結果:

array(0,3,1,4,2,5); 

有沒有這樣做,因爲性能原生方式的問題,在這裏,因爲我需要做的這十萬次

請注意,我知道我能做到這樣:

for (var $i = 0; $i < count($a1); $i++) { 
    newArray[] = $a1[$i]; 
    newArray[] = $b1[$i]; 
} 

我正在尋找一個內置的方式,如果有這裏做了快一個

+0

我不確定爲什麼內置函數會更快?這基本上是你想要做的,不是嗎? – Nanne 2012-08-06 11:37:16

+0

我想你可以將一個數組的元素存儲在奇數位置,並將其他數組的元素存儲在偶數位置,如果你想要以一個交替序列合併它們。 – Fyre 2012-08-06 11:38:12

+0

@qwertymk不知道,但現在你有+1:-1 – Fluffeh 2012-08-06 11:41:12

回答

8
$count = count($a1); 
for ($i = 0; $i < $count; $i++) { 
    $newArray[] = $a1[$i]; 
    $newArray[] = $b1[$i]; 
} 

我的工作東北。

$a1 = array(0,1,2); 
$a2 = array(3,4,5); 

$start = microtime(TRUE); 

for($t = 0; $t < 100000; $t++) 
{ 
    $newArray = array(); 
    $count = count($a1); 
    for ($i = 0; $i < $count; $i++) 
    { 
     $newArray[] = $a1[$i]; 
     $newArray[] = $a2[$i]; 
    } 
} 
echo round(microtime(TRUE) - $start, 2); # 0.6 

$a1 = array(0,1,2); 
$a2 = array(3,4,5); 

$start = microtime(TRUE); 

for($t = 0; $t < 100000; $t++) 
{ 
    $newArray = array(); 
    for ($i = 0; $i < count($a1); $i++) 
    { 
     $newArray[] = $a1[$i]; 
     $newArray[] = $a2[$i]; 
    } 
} 
echo round(microtime(TRUE) - $start, 2); # 0.85 

所以預計數陣列尺寸將是〜1/4引證需要](上刻着100.000迭代你將獲得總共0.2)更快。如果您將count()置於循環內,則會每iteration重新計數。 1/4在我看來相當快。如果你正在尋找編譯功能,你可以停下來。

P.S.基準就像比基尼,它向你展示了一切,沒有任何東西。

+3

嗯叫我明顯的船長,但他沒有要求一個更好的方式比呢? – Sammaye 2012-08-06 11:48:53

+2

@Sammaye你是明顯的隊長。那麼,什麼是某種超級英雄?像[Hindsight上尉](http://southpark.wikia.com/wiki/Captain_Hindsight)? – DaveRandom 2012-08-06 11:49:53

+0

CaptainObvious,我貼了codez ... @DaveRandom :) – 2012-08-06 12:09:09