PHP数据库读取数据保存为数组各种方法性能比较

SJY发表于:2018年03月04日 12:14 • 阅读:

测试数据,6000条记录方法一:

$query = "SELECT * FROM `v9_news`";
$result = mysqli_query ( $link, $query );
 $arr =array();
while (false!= $row = mysqli_fetch_assoc ( $result ) ) {
        $arr [] = $row;
}
print_r ( $arr );
//耗时0.86~1.03 占内存19024672

方法二:

$query = "SELECT * FROM `v9_news`";
$result = mysqli_query ( $link, $query );
for($i = 0; $arr [$i] = mysqli_fetch_assoc ( $result ); $i ++)
        ;
array_pop ( $arr );
print_r ( $arr );
// /耗时0.35~0.79 占内存19024664

方法三:

$query = "SELECT * FROM `v9_news`";
$result = mysqli_query ( $link, $query );
while ( ($arr [] = mysqli_fetch_assoc ( $result )) || array_pop ( $arr ) )
        ;
print_r ( $arr );
// 耗时0.28~0.73 占内存19024384

最后一个说明一下,while语句中先判断||前面的表达式,为真,就直接进行下一个循环,不会再去判断||后面的表达式。直到数据读取完后,mysqli_fetch_assoc 返回false,才会去判断||后面的表达式,由于$arr最后一个元素为空数组,所以执行array_pop去掉了最后一个元素同时返回该空元素,while认为空元素为假,至此while循环全部完成。

方法一中$arr先声明为数组,如果不声明为数组,当while提交一开始就不满足时,打印$arr就会出错,因为没执行while里面的语句,$arr也就不存在。

另外while条件里加了一个false!= 这个其实个人觉得没什么意义,因为当读取不到数据时,mysqli_fetch_assoc 返回null,就会自动退出while循环,但不加这个在zend studio编辑器里会警告。

方法三就简单多了,少了一个赋值到$row的步骤,直接赋值到数组$arr,由于最后一次mysqli_fetch_assoc返回null,也被赋值到了$arr,所以要用array_pop来去掉最后一个数组元素。

这里也不用事先声明$arr为数组,因为执行到while语句时$arr就已经有值了,即使mysqli_fetch_assoc返回null,$arr也有一个null元素,然后经过array_pop,变成空数组。

由于这里有个逻辑或,所以也不用再前面加false!=,zend studio编辑器也不会出现黄色警告

方法二中的$arr [$i] 其中$i放不放在这都无所谓,$arr []这样自动生成指针也是一样的,性能上没多大区别,耗时跟内存不变。

欢迎转载,但请保留原文地址 http://www.sjyhome.com/php/1284.html

标签: PHP性能优化

回复(0)