在PHP中,$array[]=$value还是array\u push($array,$value)哪个更快?

在PHP中,$array[]=$value还是array\u push($array,$value)哪个更快?,php,arrays,performance,Php,Arrays,Performance,在PHP中使用什么更好的方法来附加数组成员 $array[] = $value; 或 ? 尽管手册上说最好避免函数调用,但我也读过$array[]比array\u push()慢得多。什么是一些澄清或基准?没有基准,但我个人觉得,$array[]看起来更干净,而且诚实地说,在毫秒内分割头发是非常不相关的,除非你计划在数组中附加数十万个字符串 编辑:运行此代码: $t = microtime(true); $array = array(); for($i = 0; $i < 10000;

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

$array[] = $value;

?


尽管手册上说最好避免函数调用,但我也读过
$array[]
array\u push()
慢得多。什么是一些澄清或基准?

没有基准,但我个人觉得,
$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;
这并不奇怪,因为PHP手册指出:

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


如果在添加多个值时,
array\u push
的效率更高,那么我不会感到惊讶编辑:出于好奇,我们做了一些进一步的测试,即使是大量的添加,单个的
$array[]
调用也比一次大的
数组推送
要快。有趣。

人们普遍认为[]更快,因为函数调用没有开销。另外,没有人真正喜欢PHP的数组函数

“是…干草堆,针叶草堆…还是针叶草堆…啊,f***它…[]=”

来自:

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


一个简单的$myarray[]声明会更快,因为您只是将一个项目推到项目堆栈上,因为没有函数会带来的开销。

第二个是函数调用,因此通常它应该比使用核心阵列访问功能慢。但我认为,脚本中的一个数据库查询将超过对
array\u push()

的1.000.000次调用。一个区别是,您可以使用两个以上的参数调用array\u push(),即一次可以将多个元素推送到一个数组

$myArray = array();
array_push($myArray, 1,2,3,4);
echo join(',', $myArray);
打印
1,2,3,4

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

它在报告中说:

如果使用array_push()添加一个 元素添加到数组中,最好 使用$array[]=因为这样 打电话给一个客户没有开销 功能

因为“array\u push”是一个函数,当它在循环中时会被多次调用,所以它会将内存分配到堆栈中。
但是当我们使用$array[]=$value时,我们只是给数组赋值。

我不想添加:
int-array\u push(…)
return 数组中新的元素数()。它比
$myArray[]=…]更有用、更紧凑$总计=计数($myArray)


当变量用作堆栈时,
array\u push(…)
也是有意义的

嗯?PHP的数组函数非常棒。从功能上来说,它们非常棒,是的,但他指的是不一致的命名方案。你应该在IDE中打开参数暗示。但我同意,一些一致性会很好。我确实同意这一点。命名方案(x_y或xy或y_x…)和参数逻辑(在数组、字符串和regexp之间首先、最后传递目标对象,祝你好运找到一条通用规则!)都不一致。FWIW,我喜欢针状/干草堆命名约定,并且发现它很容易记住,因为它与短语的顺序相同:“就像大海捞针一样(1)“像这样的微观优化很少值得努力。如果你是从头开始写的,那就按照最有意义的方式去做,只有到那时,如果生成一个页面有点慢,就对它进行分析。为了提高速度而不得不更改这样的内容的可能性很小。为了确保代码似乎与输出不匹配,我验证了
$array[]
确实要快得多,在我的机器上,对于1M任务,300毫秒比2000毫秒快得多。然而,在array_push中一次添加20个项目的速度大约与20
$array[]=
s一样快。@AlisterBulman如果你想返回整个代码库并“优化”它,那么微优化是不值得的。然而,如果你有几种不同的方法来做同一件事,并且意识到其中一种方法比其他方法更好(哪怕只是一点点),那么你就可以养成使用这种方法的习惯。你为什么不这么做?@AlisterBulman我必须强烈反对,或者至少部分反对,如果你知道得更好,写得更好,但不要花太多精力去寻找可能的微观优化……提醒任何旁观者:并非所有的小优化都是“过早优化”,正如Knuth所说,这是万恶之源。有些快一点的东西就是快一点的东西。记住$array[]=$s是可以的,而将代码库梳理为array\U push则不行。不要过早地击败过早优化是邪恶的鼓,因为它的存在。$myArray[]=123;这将比array_push功能更快。它直接将值添加到该数组中。函数对该变量有单独的堆栈。它可能在函数中有这样一句话,很有趣,你的答案是第一个答案,但是投票的次数较少。
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[]
$myArray = array();
array_push($myArray, 1,2,3,4);
echo join(',', $myArray);