本文简要分析一下php中array_push与$arr[] = $value两种将元素加入数组末尾的方法的性能,以便在不同的场景中能够更好的使用相应的方式去处理问题。
1. array_push方法
array_push 方法,将一个或多个元素压入数组的末尾。array_push() 将array当成一个栈,并将传入的变量压入array的末尾。array的长度将根据入栈变量的数目增加。
int array_push ( array &$array , mixed $var [, mixed $... ] )
2. $arr[] = $value; 方法
给数组增加一个值,使用效果和array_push是相同的。
比较 array_push 与 $arr[]=$value 的性能
使用array_push压入1000000个元素
<?php $starttime = get_microtime(); $arr = array(); for ($i = 0;$i < 1000000;$i++) { array_push($arr, $i); } $endtime = get_microtime(); printf("run time %f ms\r\n", ($endtime - $starttime) * 1000); function get_microtime() { list($usec, $sec) = explode(' ', microtime()); return (float)$usec + (float)$sec; }
执行时间:2735.545158 ms
使用$arr[] = $value压入100000个元素
<?php $starttime = get_microtime(); $arr = array(); for($i=0; $i<1000000; $i++){ $arr[] = $i; } $endtime = get_microtime(); printf("run time %f ms\r\n", ($endtime-$starttime)*1000); function get_microtime(){ list($usec, $sec) = explode(' ', microtime()); return (float)$usec + (float)$sec; }
执行时间:417.458057 ms
结果:每次压入一个元素,使用$arr[]=$value比使用array_push方法快7倍。
同时压入多个元素的性能比较
使用array_push方法,压入100000个元素,每次压入50个元素
<?php $starttime = get_microtime(); $arr = array(); 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 + 21, $i + 22, $i + 23, $i + 24, $i + 25, $i + 26, $i + 27, $i + 28, $i + 29, $i + 31, $i + 32, $i + 33, $i + 34, $i + 35, $i + 36, $i + 37, $i + 38, $i + 39, $i + 41, $i + 42, $i + 43, $i + 44, $i + 45, $i + 46, $i + 47, $i + 48, $i + 49); } $endtime = get_microtime(); printf("run time %f ms\r\n", ($endtime - $starttime) * 1000); function get_microtime() { list($usec, $sec) = explode(' ', microtime()); return (float)$usec + (float)$sec; }
执行时间:250.149012 ms
结果:使用array_push一次压入多个元素,比多次使用$arr[]=$value压入快。array_push一次压入的元素越多,效率越高。
总结:
如果是压入一个元素,使用$arr[]=$value效率高,因为可以节省调用函数的额外负担。
如果同时压入多个元素,使用array_push效率高,因为不用重复获取文件尾的指针。