合并数组使用array_merge还是array_splice更快?

3
哪个更快,array_merge还是array_splice用于合并数组? (使用array_splice将第二个数组替换为空,以达到合并的效果)
array_splice看起来可能会使用更少的数组复制,结果可能更快。是否有关于这一点的研究?
例如:
array_splice($a1, count($a1), 0, $a2);
$a1 = array_merge($a1, $a2); 

这两个函数的功能不同。一个是合并数组,另一个是切割数组!那么你想知道什么? - JustOnUnderMillions
1
针对您的使用情况进行基准测试怎么样?! - deceze
@JustOnUnderMillions 我猜他正在使用 array_splice(),而不是删除任何内容,只是将新数组拼接到末尾。 - Barmar
@Barmar 你是对的,我认为楼主应该忽略它,这只是微小的优化。 - JustOnUnderMillions
@Barmar 是的,没错。不删除任何内容的拼接会导致合并的效果。对于问题表述不够清晰,我表示歉意。我会进行编辑以澄清这一点。(即使这是一个微观优化的问题,评级-4似乎有点过分了) - paullb
非常难过发现这个问题得到了-3的评分,因为这正是我出于好奇而刚刚要去谷歌搜索的内容。 - i336_
2个回答

2

array_merge需要检查输入的数组是有数字键还是命名键,以便确定是追加还是合并。而array_splice不需要进行此检查。


1
$arguments = ["arg1" => "111", "arg2" => "222", "arg3" => "333"];

使用 array_splice = 3.273508(以秒为单位)

for ($i=0; $i < 1000000; $i++) { 
   $arguments = ["arg1" => "111", "arg2" => "222", "arg3" => "333"];
   array_splice($arguments, 0, 0,[777]);
   $arguments = [];
}

注意*array_splice($arguments, count($arguments), 0,[777]);array_splice($arguments, 0, 0,[777]);同时执行=约3.273508秒。
Array
(
    [0] => 777
    [arg1] => 111
    [arg2] => 222
    [arg3] => 333
)

使用array_merge = 2.984012(以秒为单位)
for ($i=0; $i < 1000000; $i++) { 

    $arguments = ["arg1" => "111", "arg2" => "222", "arg3" => "333"];
    $args = array_merge([777], $arguments);
    $arguments = [];
}

输出

Array
(
    [0] => 777
    [arg1] => 111
    [arg2] => 222
    [arg3] => 333
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接