2012-08-06 65 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