下面先让我们来测试一下共同遍历一个有50000个下标的一维数组所耗的时间:
测试平台:
CPU:P-M 725
内存:512M
硬盘:40G 5400转
OS:Windows XP SP2
WEB:apache 2.0.54 php5.0.4
测试代码:
<?php
/*
* @ Author: Lilov
* @ Homepage: www.codesky.com
* @ E-mail: zhongjiechao@gmail.com
*
*/
$arr = array();
for($i = 0; $i < 50000; $i++){
$arr[] = $i*rand(1000,9999);
}
function GetRunTime()
{
list($usec,$sec)=explode(" ",microtime());
return ((float)$usec+(float)$sec);
}
######################################
$time_start = GetRunTime();
for($i = 0; $i < count($arr); $i++){
$str .= $arr[$i];
}
$time_end = GetRunTime();
$time_used = $time_end - $time_start;
echo 'Used time of for:'.round($time_used, 7).'(s)<br><br>';
unset($str, $time_start, $time_end, $time_used);
######################################
$time_start = GetRunTime();
while(list($key, $val) = each($arr)){
$str .= $val;
}
$time_end = GetRunTime();
$time_used = $time_end - $time_start;
echo 'Used time of while:'.round($time_used, 7).'(s)<br><br>';
unset($str, $key, $val, $time_start, $time_end, $time_used);
######################################
$time_start = GetRunTime();
foreach($arr as $key => $val){
$str .= $val;
}
$time_end = GetRunTime();
$time_used = $time_end - $time_start;
echo 'Used time of foreach:'.round($time_used, 7).'(s)<br><br>';
######################################
?>
测试结果:
将三次测试结果求平均值:
分别对应for、while、foreach
0.1311650
0.1666853
0.1237440
经过反复多次测试,结果表明,对于遍历同样一个数组,foreach速度最快,最慢的则是while。foreach比while大约快20% ~ 30%左右。随后再把数组下标增加到500000、5000000测试结果也一样。但从原理上来看,foreach是对数组副本进行操作(通过拷贝数 组),而while则通过移动数组内部指标进行操作,一般逻辑下认为,while应该比foreach快(因为foreach在开始执行的时候首先把数组 复制进去,而while直接移动内部指标。),但结果刚刚相反。原因应该是,foreach是PHP内部实现,而while是通用的循环结构。
所以,在通常应用中我更喜欢用foreach形式,简单,而且效率高。在PHP5下, foreach还可以遍历类的属性。
标签:for, foreach, while, 性能比较转载请注明来源蓝普网络并以链接形式标明本文地址
本文链接: http://www.wbphp.cn/html/y02/897.html
作者:牡丹网景 | 日期:2009-02-12 | 分类:php | 评论:0 条 | 浏览:65 次
分类信息
ecshop技巧 css ecshop ecstore FleaPHP html javascript joomla LAMP mysql php qeephp zencart ZendFramework 他们看我 客户案例 APP PC 微信版 牡丹志 09感言 ecshop-lanpu成长历程 内部通知 北京手记 员工成长档案 心情日记 新闻中心 蓝普汇
标签
PHP ecshop 外包 JS php外包 牡丹网景 心情日记 function 设计 Mysql jQuery CSS 常见问题 javascript html 洛阳 进阶课堂 == 心情 2008年 技术笔记 优化 SEO phpcms 新闻 for 问题 客户 如何 工作杂记
联系我们
地址:洛阳市洛龙区长厦门街与开元大道交叉口863创智广场一号楼 23层2329 全国客服热线:400 8789 863 猪八戒店:http://shop.zhubajie.com/498238
我们的承诺
1、一条龙服务:享受特价千兆空间优惠活动。 2、免费售后:我们的客户免费三个月的网站修改、调整等售后服务,享有一年的电话网络咨 询服务。 3、反馈机制:我们做过项目的客户将会在下一个项目进行金额进行反馈,做的越多越优惠。 4、定期回访:我们将会定期回访客户,以便提升服务方式,改进工作。 5、价格最低:如果发现,其他公司的同等产品报价低于我们的我们将退还差价!