2015-06-04 108 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()调用中。