合并两个数组,合并排序样式

qwe*_*ymk 4 php

假设我有两个数组:

$a1 = array(0,1,2);
$a2 = array(3,4,5);
Run Code Online (Sandbox Code Playgroud)

我希望能够进行交替数组的合并,而不是将它们连接起来.我想要这个结果:

array(0,3,1,4,2,5);
Run Code Online (Sandbox Code Playgroud)

是否存在本地方式来执行此操作,因为性能是一个问题,因为我需要这样做数千次

请注意,我知道我可以这样做:

for (var $i = 0; $i < count($a1); $i++) {
    newArray[] = $a1[$i];
    newArray[] = $b1[$i];
}
Run Code Online (Sandbox Code Playgroud)

如果有一个更快的,我正在寻找内置的方式

Dej*_*vic 10

$count = count($a1);
for ($i = 0; $i < $count; $i++) {
    $newArray[] = $a1[$i];
    $newArray[] = $b1[$i];
}
Run Code Online (Sandbox Code Playgroud)

我在这里的工作已经完成.

$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
Run Code Online (Sandbox Code Playgroud)

所以预先计数的数组大小将是~1/4 [引用需要](在freakin'100.000次迭代中你将总共获得0.2)更快.如果你把count()内部循环,它将重新计算每一个iteration.1/4在我看来相当快.如果您正在寻找编译功能,您可以停止.

PS Benchmark就像比基尼,它向你展示了一切,没有任何东西.

  • 嗯叫我队长很明显,但他没有要求比这更好的方法吗? (3认同)
  • @Sammaye你队长很明显.那么什么是某种超级英雄呢?就像[Hindsight上尉](http://southpark.wikia.com/wiki/Captain_Hindsight)? (2认同)
  • 从计数中取出`count`技术*更好. (2认同)