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

在PHP中使用附加数组成员$array[] = $valuearray_push($array, $value)更好吗?

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

没有基准testing,但是我个人觉得$array[]看起来更干净,老实说,在几毫秒内拆分头发是非常不相关的,除非你打算在数组中添加数十万个string。

编辑 :冉这个代码:

 $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; 

第一个使用$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[] 

这应该不会令人惊讶,因为PHP手册中提到:

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

如果array_push在添加多个值时效率更高,我不会感到惊讶。 编辑 :出于好奇,做了一些进一步的testing,甚至对于大量的补充,单个$array[]调用比一个大的array_push快。 有趣。

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

它在文档中说:

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

从php文档array_push

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

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

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

一个区别是你可以用两个以上的参数来调用array_push(),也就是说,你可以一次将多个元素推到一个数组中。

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

打印1,2,3,4

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

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

第二个是函数调用,所以通常它应该比使用核心数组访问特性慢。 但是我认为,即使脚本中有一个数据库查询,也会超过1.000.000个对array_push()调用。

虽然问题更多地是关于性能的问题,但是人们会问这个问题是否是使用array_push或者$arr[]的好方法。

该函数可能意味着多个值较小的行:

 // 1 line: array_push($arr, "Bob", "Steve"); // versus 2 lines: $arr[] = "Bob"; $arr[] = "Steve"; 

不过array_push

  • 无法接收数组键
  • 打破针/干草堆命名约定
  • 正如已经讨论的那样,速度较慢

我会坚持$arr[]

我只是不想添加: int array_push(...)返回数组中的新元素( PHP文档 )。 这可能比$myArray[] = ...; $total = count($myArray);更有用,更紧凑$myArray[] = ...; $total = count($myArray); $myArray[] = ...; $total = count($myArray);

当variables用作堆栈时, array_push(...)也是有意义的。