我是否应该在PHP中使用嵌套的if ... else语句进行一系列小于比较

时间:2010-08-09 17:24:39

标签: php

我需要与PHP中的整数进行一系列比较,根据结果返回不同的字符串,我想知道if..else块是否是最优雅的方法。代码如下:

if( $total < 10000 ) {
  return 'string A';
} elseif( $total < 20000 ) {
  return 'string B';
} elseif( $total < 30000 ) {
  return 'string C';
} elseif( $total < 40000 ) {
  return 'string D';
} elseif( $total < 50000 ) {
  return 'string E';
}

哪个有效,我觉得它不太漂亮。如果我正在进行等式检查,那么我会使用一个开关块。

6 个答案:

答案 0 :(得分:7)

你可以使用这样的数组(假设$total总是正数):

$results = array('string A', 'string B', 'string C', 'string D', 'string E');
$index = floor($total / 10000);
if ($index < 5) return $results[$index];

答案 1 :(得分:4)

如果你想使用其中一条评论中建议的switch-case语句,你必须这样写:

switch(true) {
  case ($total < 10000): return 'string A';
  case ($total < 20000): return 'string B';
  case ($total < 30000): return 'string C';
  case ($total < 40000): return 'string D';
  case ($total < 50000): return 'string E';
}

每个案例都将被评估为true | false,并且一旦脚本命中它所查找的内容true,它将返回相应的字符串。

它可能不会比原始代码更有效,但它更容易阅读......

答案 2 :(得分:1)

您可以使用如下的开关语句:

switch (round($total / 10000)) {
    case 0: //0xxxx
        break;
    case 1: //1xxxx
        break;
    case 2: //2xxxx
        break;
    case 3: //3xxxx
        break;
    ...
}

我不是PHP程序员,所以语法可能有误。

答案 3 :(得分:0)

您还可以查看Chain of Responsibility Pattern,但这对您的UseCase来说可能有点过分。

答案 4 :(得分:0)

从代码重用pov开始,op的风格非常令人满意。它很容易理解和修改。但是,是的,对于“优雅”,Gumbo的片段是要走的路。

    if ($total < 10000) { return 'string A'; } 
elseif ($total < 20000) { return 'string B'; } 
elseif ($total < 30000) { return 'string C'; } 
elseif ($total < 40000) { return 'string D'; } 
elseif ($total < 50000) { return 'string E'; }

答案 5 :(得分:0)

如果您没有根据结果返回,或者您需要执行多项操作,这不起作用,但是根据您提供的示例,您甚至不需要其他if或者切换,它可能只是:

if ($total < 10000) return 'A';
if ($total < 20000) return 'B';
if ($total < 30000) return 'C';
if ($total < 40000) return 'D';
if ($total < 50000) return 'E';