PHP 網頁設計 技巧
PHP基本上就係一種陣列語言。時常要進行大量既陣列循環操作,主要有兩種方式,一種係foreach,另一種係while,到底邊種好邊種壞一直有爭論,雖然我好早就意識到呢個問題,但係一直冇細究,懵懂的感覺一直持續到現在,為左以後能節省點CPU時間,下面總結一下:
在循環裡進行既係陣列“讀”操作,則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];
}
在循環裡進行的係陣列“寫”操作,則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] . '...';
}
總結:通常認為,foreach涉及到值複製,一定會比while慢,但實際上,如果僅僅係在循環裡進行陣列既讀操作,咁foreach係好快,咁係因為PHP採用既複製機制係“引用複製,寫時拷貝”,咁睇foreach既高效讀操作就唔難理解。另外,既然foreach唔適合處理陣列寫操作,咁我地可以得出一個結論,多數情況下,類似foreach ($array as $key => $value)形式既代碼都應該被替換成while (list($key) = each($array))。呢d技巧產生既速度差異在小項目裡可能並不明顯,但係在類似框架咁既大項目中,一次請求動輒便會涉及到幾百幾千幾萬次數組循環操作,差異就會明顯放大。
留言列表