php中for、foreach、which性能比較

引用原文:http://old.ruesin.com/php/loop-array-87.htmlPHP遍歷數(shù)組常用方法foreach,for,while的性能比較

整體效果來看:while的性能是最差的,其次是for,而執(zhí)行效率最快的是foreach,特別是沒有使用$key時。

foreach/for

Ruesin's Blog

for循環(huán)是PHP中最復(fù)雜的循環(huán)結(jié)構(gòu)。expr1 在循環(huán)開始前無條件求值一次。expr2 在每次循環(huán)開始前求值。expr3 在每次循環(huán)之后被求值(執(zhí)行)。

而對于遍歷數(shù)組for需要知道數(shù)組長度再用$i++來操作,一次循環(huán)要進行多次條件判斷或計算,而foreach不需要進行計算和判斷,可自動檢測并輸入key,和value。

foreach 有key/無key

foreach (array as $value)遍歷給定的 array 數(shù)組。每次循環(huán)中,當(dāng)前單元的值被賦給 $value 并且數(shù)組內(nèi)部的指針向前移一步。

foreach (array as $key => $value)不僅要有上述操作,而且當(dāng)前單元的鍵值也會在每次循環(huán)中被賦給變量$key。

文章來自ruesin.com

foreach/while

foreach是對數(shù)組副本進行操作(通過拷貝數(shù)組),而while則通過移動數(shù)組內(nèi)部指標(biāo)進行操作,一般邏輯下認為,while應(yīng)該比foreach快(因為foreach在開始執(zhí)行的時候首先把數(shù)組復(fù)制進去,而while直接移動內(nèi)部指標(biāo)。),但結(jié)果剛剛相反。原因應(yīng)該是,foreach是PHP內(nèi)部實現(xiàn),而while是通用的循環(huán)結(jié)構(gòu)。

而PHP內(nèi)部的復(fù)制機制是“引用計數(shù),寫時復(fù)制”,也就是說,即便在PHP里復(fù)制一個變量,最初的形式從根本上說其實仍然是引用的形式,只有當(dāng)變量的內(nèi)容發(fā)生變化時,才會出現(xiàn)真正的復(fù)制,之所以這么做是出于節(jié)省內(nèi)存消耗得目的,同時也提升了復(fù)制的效率。

for/while

理論上感覺這兩個應(yīng)該是一樣的啊,循環(huán)/計算/判斷/循環(huán)…? 可是為什么性能差這么多? 希望有哪位朋友看到能講解一下.

注: 當(dāng) foreach 開始執(zhí)行時,數(shù)組內(nèi)部的指針會自動指向第一個單元。這意味著不需要在 foreach 循環(huán)之前調(diào)用 reset()。

注: 除非數(shù)組是被引用,foreach 所操作的是指定數(shù)組的一個拷貝,而不是該數(shù)組本身。因此數(shù)組指針不會被 each() 結(jié)構(gòu)改變,對返回的數(shù)組單元的修改也不會影響原數(shù)組。

注: foreach 不支持用“@”來禁止錯誤信息的能力。

注: 自php5起,foreach 可以很容易地通過在 $value 之前加上 & 來修改數(shù)組的單元,此方法將以引用賦值而不是拷貝一個值。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容