寫這篇文章的原因主要是在開發過程中突然有以下幾個疑問,特抽出時間深度探究一下,以加深自身對php的理解。
1、身為phper,for和foreach循環遍歷幾乎每天都在使用,那麼這兩種遍歷方式哪一種效率更高呢?
2、效率高的原因是什麼呢?
3、原理分別是什麼呢?
首先要解決第一個問題,我們可以透過一個簡單的測試看一下測試結果,測試程式碼如下:
##for迴圈遍歷方法:#
public function getForTime(){ $big_Array = range(0,1000000,1); /* for循环遍历数组示例 */ $start_For_Time = $this->microtime_float(); //$array_Count = count($big_Array); for ($i=0;$i<count($big_Array);$i++) { $i; } $end_For_Time = $this->microtime_float(); $for_Time = $end_For_Time - $start_For_Time; echo 'for循环遍历耗时:'.$for_Time.'<br>'; }
foreach循環遍歷方法:
public function getForeachTime(){ $big_Array = range(0,1000000,1); /* foreach循环遍历数组示例 */ $start_Foreach_Time = $this->microtime_float(); foreach ($big_Array as $key=>$val) { $key; } $end_Foreach_Time = $this->microtime_float(); $foreach_Time = $end_Foreach_Time - $start_Foreach_Time; echo 'foreach循环遍历耗时:'.$foreach_Time; }時間計算方法:
/** * 时间统计函数 */ private function microtime_float($time = null) { list($usec, $sec) = explode(' ', $time ? $time : microtime()); return ((float)$usec + (float)$sec); }看一下兩種方式耗時
/* * 输出结果:第一种情况:先count在for循环遍历耗时:0.028002023696899 秒 * foreach循环遍历耗时:0.003000020980835 秒 * 第二种情况:在for循环条件中做count遍历耗时:0.095005035400391 秒 * foreach循环遍历耗时:0.0040009021759033 秒 * */從上面的測驗中我們可以明顯的得出兩個結論:
1、for循环遍历的效率是低于foreach循环遍历 2、for循环在外部做count和在条件中做count相比较,第一种效率更高那麼第二個問題:效率高的原因是什麼呢?在尋找這個答案之前我們先探討第三個問題,我們來看看原理分別是什麼。
for 迴圈:
每次從$i開始,每次迴圈都需要判斷$i是否小於count,這佔用了很大一部分時間小於繼續,否則終止迴圈
foreach:
foreach 依赖 IEnumerable. 第一次 var a in GetList() 时 调用 GetEnumerator 返回第一个对象 并 赋给a, 以后每次再执行 var a in GetList() 的时候 调用 MoveNext.直到循环结束. 期间GetList()方法只执行一次. 从上面是分析我们明显可以得出结论:php 的foreach循环效率是大大高于for循环。BUT:事實真的是這樣嗎?有人會說這個例子已經很明顯了啊,結論一目了然,難道還有其他的可能嗎? 我覺得事實沒這麼簡單,如果真的是這樣,for迴圈存在的意義是什麼呢? 既然foreach效率高於for這麼多倍,就直接都用foreach不就行了嗎?個人覺得我測試的這個例子有一定的局限性,並不能作為評估兩個循環方式效率高低的絕對依據。 不過,對於我們phper來說,正常工作當中還是使用foreach循環遍歷比較好,至於編譯層是如何工作的沒必要涉及太深,如果有興趣可以深度研究一下。 以下是網友回覆:
for存在的意義是因為有一些情況是foreach不好實現的,具體的你可以看一看Effective Java的第46條,雖然你是做php的,但基本上都是相通的吧!書裡面推薦使用foreach模式,但是有以下三種情況不合適: 1. 過濾-如果需要在集合上遍歷且移去選定的元素,就要使用顯式的迭代,並調用它的remove方法。 2. 轉換-如果需要在list或陣列上遍歷且要取代部分或所有的元素值,則需要list的迭代器或陣列的索引去設定這些值。 3. 平行迭代-如果需要並行的遍歷多個集合,則需要顯式的控制迭代器或索引變量,以便所有的迭代器或索引能協同推進然後for和foreach在性能上貌似遍歷不一樣的數據會有不一樣的效能差別,像是鍊錶或數組,這個也是我最近有所疑惑的。相關推薦:《
PHP教學》
以上是for和foreach哪個效率比較高?為什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP可以輕鬆創建互動網頁內容。 1)通過嵌入HTML動態生成內容,根據用戶輸入或數據庫數據實時展示。 2)處理表單提交並生成動態輸出,確保使用htmlspecialchars防XSS。 3)結合MySQL創建用戶註冊系統,使用password_hash和預處理語句增強安全性。掌握這些技巧將提升Web開發效率。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP在現代Web開發中仍然重要,尤其在內容管理和電子商務平台。 1)PHP擁有豐富的生態系統和強大框架支持,如Laravel和Symfony。 2)性能優化可通過OPcache和Nginx實現。 3)PHP8.0引入JIT編譯器,提升性能。 4)雲原生應用通過Docker和Kubernetes部署,提高靈活性和可擴展性。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),