2012-05-19 33 views
1

我正在循環中檢查一個字符串是否等於另一個字符串。簡單的東西。更快使用in_array()或大if-conditional?

但是,似乎我不斷添加到字符串來檢查,並有像我檢查每個循環通過十個不同的字符串。只需創建一個字符串數組來檢查是否更簡單,然後執行in_array();但我想知道哪種解析速度更快,使用的系統資源更少?

陣列

$hideme = array(".", "..", "Thumb.db", "index.php", "icons", "index_backup.php", 
    "style.css", "highlighter.css", "highlighter.js", "users"); 
if (!in_array($sub, $hideme)) { 

字符串!=字符串

if ($sub != "." && $sub != ".." ...etc 

的差異可能是微不足道的,只是好奇,以供將來參考。

+1

不用擔心。對於小'n',數組將會*可以忽略*較慢(例如,它不重要,不用擔心)。對於大型'n'一套將顯着更快。在這兩種情況下,對於上面的任何'n',比如說2-3,使用數組/集合將會導致更簡潔的代碼。 – 2012-05-19 14:08:43

回答

1

內置函數總是更快,因爲它們是編譯的C代碼。 PHP代碼必須被解釋。

如果你真的關心CPU週期,isset()是最快的,所以將可能的值設置爲數組鍵是最快的方法。當然,CPU和內存的使用率有關,所以使用較少的系統資源取決於您想要保存哪些資源。作爲@Kendall Frey表示,這是微型優化,所以保持代碼可讀性,不要做任何有關優化的事情,除非事件探查器顯示此代碼對執行有很大影響。

7

使用第一個。速度沒有太大差別,但可讀性是真正的差異。

CPU週期很便宜。程序員的時間不是。

0

如果您的$ hideme數組變大,最容易擴展的解決方案(也許是最快的)就是使用isset()。

$hideme = array(".", "..", "Thumb.db", "index.php", "icons", "index_backup.php", 
"style.css", "highlighter.css", "highlighter.js", "users"); 

if (!isset($hideme[$sub])) { 
    // $sub is not in $hideme 
} 

對於小數組,in_array工作正常,但通常速度較慢,如果數組較大,速度可能會變得太慢。