2012-03-07 128 views
0

我有一個作爲一個簡單的數據庫的文本文件,每個條目跨越兩行,像這樣:哪種方法更快?

name 
number 
bob 
39 
jack 
22 
jill 
85 

現在說,我有一個數組分開的每一行,我要分析每個名稱和看看它是否等於一個變量。這樣做會更快:

if($variable == $line) { 
    //true 
} 

或者先過濾出偶數行(名稱),然後分析它們以查看它們是否等於變量?如果你不知道,下面的第一行基本上會發現計數的剩餘部分(這全部在foreach循環中)除以2,如果它等於0,那麼它是偶數。

if ($count%2 == 0) { 
    if($variable == $line) { 
     //true 
    } 
} 

謝謝。

+0

爲什麼要經歷偶數的麻煩?這樣做的目的是什麼?直接找到他們! – Joseph 2012-03-07 04:03:33

回答

1

我肯定會跟根據「一些第一個樣式去「情況。例如,您認爲您的平等運作需要多長時間?在我看到整數或雙打被比較的情況下,這種第一種風格對我個人而言似乎好得多。

模運算符在我的書中是一個昂貴的操作。如果你有一個龐大的數據庫進行模操作會花費很多時間。你可以嘗試使用其他方法Reference這樣的東西來加快速度。

我希望你對上面的代碼做一個時間研究,看看你自己的時間差異。當我使用約5百萬個數據集的模操作時,我遇到了一些與時間有關的重大問題。

根據其中一個答案進行編輯。

絕對使用已提供的+ = 2操作,而不是模數以及第一種情況。

0

第二個更快。對於像這樣的處理,假設計算時間可以忽略不計,而且試驗次數會對您的速度產生更大的影響。就程序效率而言,這幾乎總是這樣。特別是與簡單檢查相比,如兩個if陳述與一個。

0

if語句合併爲第二個語句以獲得更高的速度。

if($count%2==0 && $variable==$line) { 
} 
+0

我認爲翻譯已經採取了這種優化(在低級代碼中)。 – 2012-03-07 04:07:25

+0

我不確定它是否存在。但如果沒有,那麼它會加快速度。 – judda 2012-03-07 04:09:49

0

我假設你有一個像

$lines = array('bob', '39', 'jack', '22', 'jill', '85'); 

數組然後直接跳過奇數行你for循環:

for ($i=0, $len=count($lines); $i<$len; $i+=2) { 
    if ($lines[$i] == $var) { 
     // true 
    } 
}