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技巧產生既速度差異在小項目裡可能並不明顯,但係在類似框架咁既大項目中,一次請求動輒便會涉及到幾百幾千幾萬次數組循環操作,差異就會明顯放大。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 dettori 的頭像
    dettori

    Web Design

    dettori 發表在 痞客邦 留言(0) 人氣()