空间访问权限:游客, 头像访问权限:自己
[登录]后可以浏览更多信息
博客正文
【操作】
PHP循环语句的执行效率

今天写一个字符串处理函数,需要对串内所有字符进行处理,于是涉及到了循环语句处理的效率问题。

实验一:for循环跳出条件表达式的写法,其中str是一个800000B长的字符串

<?
 $len = strlen($str);
 for($i=0;$i<$len;$i++){
  …………
 }

 $len = strlen($str);
 for($i=0;$i<=$len-1;$i++){
  …………
 }

 for($i=0;$i<strlen($str);$i++){
  …………
 }
?>

结果是前2种速度相当,都比3种速度快,前2种平均执行时间为3.9s+,而第3种执行时间为4.1s+。为了进一步验证第3种多出来的开销是不是反复执行strlen函数,实验继续

实验二、验证strlen被循环条件表达式语句反复执行了

<?

$len = strlen($str);
for($i=0;$i<$len;$i++){
     $l = strlen($str);
}

?>
经测试发现这段代码的执行时间在0.15s+左右,说明for循环里的函数被反复执行了,而不是预先执行通过寻址的方式取得其返回值。结论,循环退出表达式里尽量不要用函数。

实验三、来电福利性实验,顺便测试一下isset函数的效率

<?
$len = strlen($str);
for($i=0;$i<$len;$i++){
 $l = isset($str[$i]);
}
?>

计算结果为0.044s+,比strlen快不少。

实验四、更多福利

<?
$len = strlen($str);
for($i=0;$i<$len;$i++){
  $l = $str[$i];
}
?>

晕倒,执行时间为0.12s-,个人猜想是字符串的赋值更慢的缘故。

  • 把实验三的赋值表达式去掉,只执行isset函数,得到0.04s。
  • 空循环的执行时间是0.022s
  • $a="123"的执行时间是0.13s
  • $a=123的执行时间是0.06s
  • $a=false的执行时间是0.06s

 

实验十:while循环

进行中……

栏目划分
WEB应用程序 (21)
桌面应用程序 (4)
Windows操作系统 (8)
xNix操作系统 (3)
数据库技术 (3)
多媒体技术 (0)
硬件技术 (2)
办公软件 (1)
以史为鉴 (2)
万博官网manbetx苹果版反思1 (1)
奇闻趣事 (5)
其它 (9)
万博官网manbetx苹果版反思 (3)
电子技术 (2)
中学生科技 (3)
 
主人推荐
音象定位和音箱喇叭的排步
我国高层意向已定:制造大飞机
“运十”悲剧
日尔曼人
细说百越族
宇宙深处的秘密——星云
[强烈推荐]中华56民族FLASH完整珍藏版
一组漂亮的植物