在PHP $ array = $ value或array_push($ array,$ value)中使用什么更好?
在PHP中使用附加数组成员$array[] = $value
或array_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(...)
也是有意义的。