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

时间:2009-02-18 04:28:38

标签: php arrays performance

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

$array[] = $value;

array_push($array, $value);

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

10 个答案:

答案 0 :(得分:129)

没有基准测试,但我个人觉得$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更快。有趣。

答案 1 :(得分:38)

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

它在documentation中说:

  

如果使用array_push()添加一个   元素到数组最好   使用$ array [] =因为这样   没有呼叫的开销   功能

答案 2 :(得分:25)

来自php docs for array_push

  

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

答案 3 :(得分:17)

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

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

答案 4 :(得分:8)

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

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

打印1,2,3,4

答案 5 :(得分:2)

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

答案 6 :(得分:2)

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

答案 7 :(得分:1)

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

答案 8 :(得分:0)

虽然问题更多是关于表现,但人们会想到这个问题,想知道使用array_push$arr[]是否是一种好习惯。

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

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

然而array_push ...

  • 无法接收数组密钥
  • 打破 needle / haystack 命名约定
  • 比较慢,正如已经讨论的那样

我会坚持使用$arr[]

答案 9 :(得分:0)

我只是想添加:int array_push(...)返回 数组中新元素的数量(php doc)。这比$myArray[] = ...; $total = count($myArray);更有用,也更紧凑。

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