在PHP $ array [] = $ value或array_push($ array,$ value)中使用什么更好?

ale*_*lex 103 php arrays performance

在PHP中使用什么更好的附加数组成员:

$array[] = $value;
Run Code Online (Sandbox Code Playgroud)

要么

array_push($array, $value);
Run Code Online (Sandbox Code Playgroud)

虽然手册说你最好避免函数调用,但我读$array[]的速度要慢得多array_push().有没有人有任何澄清或基准?

Pao*_*ino 136

没有基准测试,但我个人觉得看起来$array[]更干净,除非你打算在你的阵列上附加成千上万的字符串,否则老实说分裂毫秒是非常无关紧要的.

编辑:跑这段代码:

$t = microtime(true);
$array = array();
for($i = 0; $i < 10000; $i++) {
    $array[] = $i;
}
print microtime(true) - $t;
print '<br>';
$t = microtime(true);
$array = array();
for($i = 0; $i < 10000; $i++) {
    array_push($array, $i);
}
print microtime(true) - $t;
Run Code Online (Sandbox Code Playgroud)

使用的第一种方法$array[]比第二种方法快50%.

一些基准结果:

Run 1
0.0054171085357666 // array_push
0.0028800964355469 // array[]

Run 2
0.0054559707641602 // array_push
0.002892017364502 // array[]

Run 3
0.0055501461029053 // array_push
0.0028610229492188 // array[]
Run Code Online (Sandbox Code Playgroud)

这应该不足为奇,因为PHP手册指出:

如果使用array_push()向数组添加一个元素,最好使用$ array [] =因为这样就没有调用函数的开销.

它的措辞如果array_push在添加多个值时效率更高,我不会感到惊讶.编辑:出于好奇,做了一些进一步的测试,即使是大量的增加,个别$array[]电话比一个大的快array_push.有趣.

  • 像这样的微观优化很少值得努力.如果你是从头开始编写它,那么它是如何最有意义的,只有这样,如果它产生一个页面有点慢,请对它进行分析.一路走下去不得不改变这样的东西以加快速度的可能性很小. (10认同)
  • 只是为了确保,因为代码似乎与输出不匹配,我验证了`$ array []`确实要快得多,300ms与我的机器上1M分配的2000ms相比.但是,在array_push中一次添加20个项目的速度和20` $ array [] =`s一样快. (4认同)
  • @AlisterBulman如果你想要回顾整个代码库并"优化"它,微观优化是不值得的.但是,如果你有几种不同的方法来做同样的事情,并且意识到一种方式比其他方式更好(甚至只是一点点),你可以习惯使用这种方式.你为什么不这样做? (4认同)
  • @AlisterBulman 我必须强烈反对,或者至少部分不同意,**如果你知道得更好,写得更好**,但不要花太多精力去寻找*可能的*微优化...... (2认同)
  • 提醒任何旁观者:并非所有次要优化都是“过早优化”,正如 Knuth 所说,这是万恶之源。一些稍微快一点的东西就是快一点的东西。记住 $array[]=$s 是可以的,为 array_push 组合你的代码库不是。不要仅仅因为它存在就过早地击败过早优化是邪恶的鼓。 (2认同)

Ins*_*ire 38

array_push()的主要用途是可以将多个值推送到数组的末尾.

它在文档中说:

如果使用array_push()向数组添加一个元素,最好使用$ array [] =因为这样就没有调用函数的开销.


Ben*_*hen 27

PHP文档array_push:

注意:如果使用array_push()向数组添加一个元素,最好使用$ array [] =因为这样就没有调用函数的开销.


typ*_*ror 18

街上的字是[]更快,因为函数调用没有开销.另外,没有人真正喜欢PHP的数组函数......

"它是干草堆,针......还是它是针干草堆......啊,f***它...... [] ="

  • 功能上它们很棒,是的,但他指的是不一致的命名方案. (11认同)
  • 咦?PHP的数组函数非常棒. (7认同)
  • 我对此表示同意.在命名方案(x_y或xy或y_x ...)中也没有一致性,也没有参数*logic*(首先传递目标对象,最后传递数组,字符串和正则表达式之间的一致性,祝你找到一个共同的规则! ). (4认同)
  • FWIW,我喜欢_needle/haystack_命名约定,并且发现它很容易记住,因为它与短语的顺序相同:_"就像在大海捞针中找到针(1)(2)"_ (3认同)
  • 您应该在IDE中打开参数提示.但我同意,一些一致性会很好. (2认同)

Vol*_*erK 8

一个区别是您可以使用两个以上的参数调用array_push(),即您可以一次将多个元素推送到数组.

$myArray = array();
array_push($myArray, 1,2,3,4);
echo join(',', $myArray);
Run Code Online (Sandbox Code Playgroud)

版画 1,2,3,4