php - 使用strpos()替换if语句中的多个比较

时间:2013-08-06 21:39:55

标签: php if-statement strpos

使用strpos()替换多个比较是否可以? 例如:
改变

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

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

1 个答案:

答案 0 :(得分: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 )