2011-10-14 70 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; 
}