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效率高,因为不用重复获取文件尾的指针。

上一篇下一篇

猜你喜欢

热点阅读