2011-10-14 93 views
1

我有一些代碼在這裏任何方法來減少代碼的重複模式在PHP

if ($brand == "Kumiai Dairies" || $brand == "Anlene" || $brand == "Yoplait" || $brand == "Hokkaido Hidaka" 
|| $brand == "Jacob's" || $brand == "V8" || $brand == "Cow & Gate"){ 
do something here; 
} 

有什麼辦法來防止重複$品牌==「XXX」?

回答

7

是的,你可以使用in_array

in_array($brand, array('Kumiai bla', 'Analblah', 'Whatever', ...)) 
+4

在這種情況下它並不重要,但它可能值得一提的是,in_array是線性搜索,而array_key_exist(或keyset上的isset)是恆定時間。有時我使用Felix的方法,如果它是一個經常搜索的大型數組。 – Corbin

+0

@Corbin你是什麼意思? – red23jordan

+0

@ red23jordan:線性搜索需要花費O(n)個時間來查找元素。如果您有一個包含1000個元素的數組,則必須進行1000次比較(最差情況下)。在數據結構等哈希表中查找元素需要'O(1)',因此它與您的集合的大小無關。對於像你這樣的小套裝,差異可以忽略不計。 –

6

您可以創建一個關聯數組:

$brands = array(
    "Kumiai Dairies" => true, 
    "Anlene" => true, 
    ... 
); 

,然後用

if(isset($brands[$brand])) { 

} 

在見@科爾賓的評論@檢查ThiefMaster的答案是解釋這兩種方法的差異。

+1

你可以通過使用常規數組然後使用array_flip()來使數組定義好得多。 – ThiefMaster

+1

array_flipping將在線性時間內完成,但是如果在同一個腳本運行中搜索要多次完成,那麼翻轉只會有用。 –

1

您可以使用開關, 1.its快,搜索常量時間 2.不需要每次都在其中搜索數組&。

switch($brand){ 
case "Kumiai Dairies": 
case "Anlene": 
.... 
.... 
//do something 
break; 
}