我需要与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';
}
哪个有效,我觉得它不太漂亮。如果我正在进行等式检查,那么我会使用一个开关块。
答案 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';