while是通過移動數組內部指標老進行操作。
foreach是對數組副本進行操作。
在循環數組的“讀”操作裏,foreach的運行速度超過while
在循環數組的“寫”操作裏,while的運行速度超過foreach
總結:通常認爲,foreach涉及到值複製,一定會比while慢,但實際上,如果僅僅是在循環裏進行數組的讀操作,那麼foreach是很
快的,這是因爲PHP採用的複製機制是“引用計數,寫時複製”,也就是說,即便在PHP裏複製一個變量,最初的形式從根本上說其實 仍然是引用的形式,只有當變量的內容發生變化時,纔會出現真正的複製,之所以這麼做是出於節省內存消耗得目的,同時也提升了 複製的效率。這樣看來,foreach的高效讀操作就不難理解了。另外,既然foreach不適合處理數組寫操作,那麼我們可以得出一個結 論,多數情況下,類似foreach ($array as $key => $value)形式的做數組寫操作得代碼都應該被替換成while (list($key) =
each($array))。這些技巧產生的速度差異在小項目裏可能並不明顯,但是在類似框架這樣的大項目中,一次請求動輒便會涉及到幾
百幾千幾萬次數組循環操作,差異就會明顯放大。
- foreach循環數組操作:
$arr = array('a','b','c');
foreach($arr as $k=>$a ){
echo $a;
}
2. while循環數組操作:
while(list($a)=each($arr)){
echo $a;
}
上面兩種循環輸出的值都是一樣的。
鑑於while循環用的少,特此提示一下
list():將數組的值賦給一些變量。
each():返回當前元素的鍵名和鍵值,並將內部指針向前移動