0

使用strpos()替换多重比较可以吗?
例子:
改变

if ( $linecounter == $extra1 || $linecounter == $extra2 || $linecounter == 5 )
{ 
  ...
}

$ok = ' ' . $extra1 . $extra2 . '5';
if ( strpos($ok, $linecounter) > 0 )
{
  ...
}
4

1 回答 1

2

不,这不行,因为那不是strpos目的。在一般情况下很容易找到有问题的示例(例如$linecounter == 15,并且$extra2 == 1--strpos检查将在不应该成功时成功)。

如果您想如此多地失去单独的条件,可行的替代方案将是switch语句或in_array

switch($linecounter) {
    case $extra1: case $extra2: case 5:
        // whatever
        break;
}

if (in_array($linecounter, [$extra1, $extra2, 5])) {
    // whatever
}

顺便说一句,strpos像这样使用大于零的测试并不是很好的风格。你想说的是“如果它在字符串中找到”,所以准确地写出来并丢失“前缀空格”黑客:

if ( strpos($extra1 . $extra2 . '5', $linecounter) !== false )
于 2013-08-06T21:42:54.070 回答