如何缩短`if-statement`

时间:2015-06-04 05:07:12

标签: php loops optimization

我的foreach循环中有一个if语句。条件长约125个字符。还有其他方法可以缩短这个吗?

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

注意:抱歉条件值的混淆,'a''b',......意味着各种各样的字符串。

4 个答案:

答案 0 :(得分:6)

首先将所有元素存储在单维数组中,在您的情况下,它将如下所示:

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

然后在内置函数in_array()中使用php来检查$ col是否存在于数组中,在这里看起来像:

in_array($col, $array);

整个代码:

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

答案 1 :(得分:2)

我会使用数组:

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

但请注意,这不是一个真正的优化,而是更多的可读性增强。你先前的陈述没有错。

答案 2 :(得分:2)

我会使用通常ascii的事实,所以你可以做类似

的事情
 if ($col >= 'a' && $col <='f') {
    continue;
}

答案 3 :(得分: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()来电。