轉(zhuǎn)帖|其它|編輯:郝浩|2009-04-01 13:58:57.000|閱讀 490 次
概述:PHP基本上就是一種數(shù)組語言。時(shí)常要進(jìn)行大量的數(shù)組循環(huán)操作,主要有兩種方式,一種是foreach,另一種是while。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
PHP基本上就是一種數(shù)組語言。時(shí)常要進(jìn)行大量的數(shù)組循環(huán)操作,主要有兩種方式,一種是foreach,另一種是while,到底哪種好哪種壞一直有爭論,雖然我很早就意識到了這個(gè)問題,但是一直沒有細(xì)究,懵懂的感覺一直持續(xù)到現(xiàn)在,為了以后能節(jié)省點(diǎn)CPU時(shí)間,下面總結(jié)一下:
在循環(huán)里進(jìn)行的是數(shù)組“讀”操作,則foreach比while快:
foreach ($array as $value) {
echo $value;
}
while (list($key) = each($array)) {
echo $array[$key];
}
foreach ($array as $value) {
echo $value;
}
while (list($key) = each($array)) {
echo $array[$key];
}
在循環(huán)里進(jìn)行的是數(shù)組“寫”操作,則while比foreach快:
foreach ($array as $key => $value) {
echo $array[$key] = $value . '...';
}
while (list($key) = each($array)) {
$array[$key] = $array[$key] . '...';
}
foreach ($array as $key => $value) {
echo $array[$key] = $value . '...';
}
while (list($key) = each($array)) {
$array[$key] = $array[$key] . '...';
}
總結(jié):通常認(rèn)為,foreach涉及到值復(fù)制,一定會比while慢,但實(shí)際上,如果僅僅是在循環(huán)里進(jìn)行數(shù)組的讀操作,那么foreach是很快的,這是因?yàn)镻HP采用的復(fù)制機(jī)制是“引用復(fù)制,寫時(shí)拷貝”,這樣看來,foreach的高效讀操作就不難理解了。另外,既然foreach不適合處理數(shù)組寫操作,那么我們可以得出一個(gè)結(jié)論,多數(shù)情況下,類似foreach ($array as $key => $value)形式的代碼都應(yīng)該被替換成while (list($key) = each($array))。這些技巧產(chǎn)生的速度差異在小項(xiàng)目里可能并不明顯,但是在類似框架這樣的大項(xiàng)目中,一次請求動輒便會涉及到幾百幾千幾萬次數(shù)組循環(huán)操作,差異就會明顯放大。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載