国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

foreach、while、for性能比較

2019-11-17 04:25:29
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一般情況下,遍歷一個(gè)數(shù)組有三種方法,for、while、foreach。其中最簡(jiǎn)單方便的是foreach。那么它們?cè)诓僮骱托阅苌洗嬖谑裁床顒e,通常使用那種方法比較好。
下面先讓我們來(lái)測(cè)試一下共同遍歷一個(gè)有50000個(gè)下標(biāo)的一維數(shù)組所耗的時(shí)間:

測(cè)試平臺(tái):
CPU:P-M 725
內(nèi)存:512M
硬盤(pán):40G 5400轉(zhuǎn)
OS:Windows xp SP2
WEB:apache 2.0.54  php5.0.4

測(cè)試代碼:
<?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>';
######################################

?>

測(cè)試結(jié)果:

將三次測(cè)試結(jié)果求平均值:
分別對(duì)應(yīng)for、while、foreach
0.1311650
0.1666853
0.1237440

經(jīng)過(guò)反復(fù)多次測(cè)試,結(jié)果表明,對(duì)于遍歷同樣一個(gè)數(shù)組,foreach速度最快,最慢的則是while。foreach比while大約快20% ~ 30%左右。隨后再把數(shù)組下標(biāo)增加到500000、5000000測(cè)試結(jié)果也一樣。但從原理上來(lái)看,foreach是對(duì)數(shù)組副本進(jìn)行操作(通過(guò)拷貝數(shù)組),而while則通過(guò)移動(dòng)數(shù)組內(nèi)部指標(biāo)進(jìn)行操作,一般邏輯下認(rèn)為,while應(yīng)該比f(wàn)oreach快(因?yàn)閒oreach在開(kāi)始執(zhí)行的時(shí)候首先把數(shù)組復(fù)制進(jìn)去,而while直接移動(dòng)內(nèi)部指標(biāo)。),但結(jié)果剛剛相反。原因應(yīng)該是,foreach是PHP內(nèi)部實(shí)現(xiàn),而while是通用的循環(huán)結(jié)構(gòu)。

所以,在通常應(yīng)用中我更喜歡用foreach形式,簡(jiǎn)單,而且效率高。在PHP5下,  foreach還可以遍歷類(lèi)的屬性。


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 东乌珠穆沁旗| 昌邑市| 大庆市| 崇信县| 金秀| 凤庆县| 海盐县| 巍山| 平湖市| 武功县| 屏东市| 神池县| 香河县| 涟水县| 巴林右旗| 东台市| 沙坪坝区| 古丈县| 吴旗县| 新邵县| 临朐县| 合水县| 颍上县| 增城市| 拉萨市| 阜城县| 栾城县| 宁化县| 汉川市| 宣恩县| 安康市| 茌平县| 芜湖县| 太仆寺旗| 土默特右旗| 台湾省| 庆元县| 怀来县| 专栏| 泊头市| 东丽区|