array_push 与 $arr[]=$value 比较
2018-05-08 本文已影响0人
swoft_
官方文档介绍array_push
(PHP 4, PHP 5, PHP 7)
array_push — 将一个或多个单元压入数组的末尾(入栈)
说明
int array_push ( array &$array , mixed $value1 [, mixed $... ] )
array_push() 将 array 当成一个栈,并将传入的变量压入 array 的末尾。array 的长度将根据入栈变量的数目增加。和如下效果相同:
<?php
$array[] = $var;
?>
Note: 如果用 array_push() 来给数组增加一个单元,还不如用 $array[] = ,因为这样没有调用函数的额外负担。
Note:如果第一个参数不是数组,array_push() 将发出一条警告。这和 $var[] 的行为不同,后者会新建一个数组。
测试真实的执行时间
function getTime()
{
list($unix, $mse) = explode(' ', microtime());
return ($unix + $mse);
}
$startTime = getTime();
$arr = [];
for ($i = 0; $i < 1000000; $i++) {
array_push($arr, $i);
}
$endTime = getTime();
echo "array_push 循环一百万次的时间" . ($endTime - $startTime)*1000 . "\n";
$startTime = getTime();
$arr = [];
for ($i = 0; $i < 1000000; $i++) {
$arr[] = $i;
}
$endTime = getTime();
echo "arr[] = i 循环一百万次的时间" . ($endTime - $startTime)*1000 . "\n";
$startTime = getTime();
$arr = [];
for($i=0; $i<1000000; $i=$i+50){
array_push($arr, $i,$i+1,$i+2,$i+3,$i+4,$i+5,$i+6,$i+7,$i+8,$i+9,$i+10,
$i+11,$i+12,$i+13,$i+14,$i+15,$i+16,$i+17,$i+18,$i+19,$i+20,
$i+21,$i+22,$i+23,$i+24,$i+25,$i+26,$i+27,$i+28,$i+29,$i+30,
$i+31,$i+32,$i+33,$i+34,$i+35,$i+36,$i+37,$i+38,$i+39,$i+40,
$i+41,$i+42,$i+43,$i+44,$i+45,$i+46,$i+47,$i+48,$i+49,$i+50);
}
$endTime = getTime();
echo "array_push 多个元素循环一百万次的时间" . ($endTime - $startTime)*1000 . "\n";
总结
如果用 array_push() 来给数组增加一个单元,还不如用 $array[] = ,因为这样没有调用函数的额外负担。
如果同时压入多个元素,使用array_push效率高,因为不用重复获取文件尾的指针。