2015-06-04 106 views
3

我在我的foreach循環中有一個if語句。該條件長約125個字符。還有其他方法可以縮短這個嗎?如何縮短`if語句`

if ($col == 'foo' || $col == 'bar' || $col == 'baz' || $col == 'fubar' || $col == 'spam' || $col == 'eggs') { 
    continue; 
} 

注:對不起的條件值傢伙,'a''b'混亂,...的意思是不同的字符串。

+0

第一個問題總是:「你究竟在做什麼」。你是否想要匹配列表中的單詞?你想匹配字符串模式嗎?你是否試圖在PHP中匹配你從數據庫中檢索的東西,並且可以讓數據庫做到這一點?你已經有3個答案,他們都沒有試圖找出你實際上想做的事情。 –

+0

@ Mike'Pomax'Kamermans我正在嘗試匹配列表中的單詞(col)..條件是我想要在頁面上顯示的例外。 –

+0

你的例子也是非常人爲的:看起來這些都不是你想要停止過濾的實際單詞,所以:添加更多細節。描述你實際正在做什麼,而不是用玩具詞,你可能會得到更準確,更有用的答案(因爲它感覺就像你問了一個[XY問題](http://meta.stackexchange)。問題/問題/ 66377 /這是什麼問題)問題) –

回答

6

存放在一維數組的所有元素首先,你的情況,這將是這樣的:

$array = array('a','b','c','d','e','f'); 

然後使用PHP的內置函數in_array()來檢查是否存在於數組$山坳,在你這個樣子:

in_array($col, $array); 

整個代碼:

$array = array('a','b','c','d','e','f'); 
if(in_array($col, $array)) { 
    continue; 
} 
2

我會用一個數組:

if(in_array($col, ['a','b','c','d','e','f'])) { 
    continue; 
} 

但要知道比這是不是一個真正的優化,更有可讀性增強。你以前的發言沒有任何錯誤。

2

我會用一個事實,即通常有ASCII,所以你可以做這樣的事情

if ($col >= 'a' && $col <='f') { 
    continue; 
} 
+1

恩,對不起,我的意思是字符串是變量。如果我將英文單詞作爲列值,該怎麼辦? –

0

嘗試是這樣的:

if (in_array($col, array('foo', 'bar', 'baz', 'fubar', 'spam', 'eggs')) 
{ 
    continue; 
} 

如果你使用PHP 5.4+,你可以把它看上去有點更優雅:

if (in_array($col, ['foo', 'bar', 'baz', 'fubar', 'spam', 'eggs']) 
{ 
    continue; 
} 

如果您需要嚴格比較,如'x' === $x,請將, true添加到in_array()調用中。