在 PHP 中,$array [] = $value 或 array_push ($array,$value)哪个更快?

在 PHP 中添加数组成员更好的方法是什么,

$array[] = $value;

或者

array_push($array, $value);

?

虽然说明书上说最好避免函数调用,但我也读到 $array[]array_push()慢得多。什么是一些澄清或基准?

54187 次浏览

我个人觉得 $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;

使用 $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在添加多个值时效率更高,我不会感到惊讶。出于好奇,我做了一些进一步的测试,甚至对于大量的附加,单个 $array[]调用比一个大的 array_push调用更快。有意思。

有传言说[]更快,因为函数调用没有开销。另外,没有人真正喜欢 PHP 的数组函数..。

“这是... 大海捞针... 还是大海捞针... 啊,操 * * * 它... [] =”

来自 array_push的 PHP 文档:

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

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

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

这里有一个使用1000000插入的快速基准测试: https://3v4l.org/sekeV

一个不同之处是,您可以使用两个以上的参数调用 array _ push () ,也就是说,您可以一次将多个元素推送到一个数组。

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

指纹 1,2,3,4

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

文件上说:

如果使用 array _ push ()添加一个 元素到数组,最好是 使用 $array [] = ,因为这样 没有调用 功能。

由于“ Array _ push”是一个函数,并且在循环中多次调用它,因此它会将内存分配到堆栈中。

但是当我们使用 $array [] = $value 时,我们只是给数组分配一个值。

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

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