我目前正在使用嵌套的if语句处理foreach循环,但我非常确定这是编写if语句块的更好方法。
我发现这篇文章:PHP if shorthand and echo in one line - possible?
虽然这篇文章是针对单一条件的,但我想以同样的方式写我的(单行)。
我自己没有PHP经验,所以我有点坚持用老式的方式做这件事:
if(($colorLevel['name'] === 'ATTR_VPMCV13') && ($colorLevel['level'] >= 80))
{
$prominentSideNumberArray[] = 10;
}
elseif(($colorLevel['name'] == 'ATTR_VPMCV13') && ($colorLevel['level'] >= 60) && ($colorLevel['level'] <= 70)){
$prominentSideNumberArray[] = 8;
}
如果有人可以正确地解释在哪里以及为什么使用哪些代码,那可能真的有助于我和/或其他人。我查看了手册,但我无法弄清楚在哪里使用。
答案 0 :(得分:1)
没有像&#34;如果简写&#34; 这样的事情。
?:
是运营商,if
是control structure。它们是不同的语言概念,具有不同的目的并且做不同的事情。包含三元条件运算符(?:
)的表达式总是可以重写为两个表达式和if/else
statement。反之亦然。
如果您将$colorLevel['name']
的常见检查提取到包含其余测试的单独if
中,则可以编写您发布的代码,以便更容易阅读,提取$colorLevel['level']
转换为名称较短的新变量,并使使用$colorLevel['level']
的条件使用相同的规则:
$level = $colorLevel['level'];
if ($colorLevel['name'] == 'ATTR_VPMCV13') {
// Don't mix '<=' with '>=', always use '<='...
if (60 <= $level && $level <= 70) {
$prominentSideNumberArray[] = 8;
// ... and put the intervals in ascending order
} elseif (80 <= $level) {
$prominentSideNumberArray[] = 10;
}
}
如果有多个if
语句验证了$colorLevel['name']
的不同值,那么如果您使用switch
statement,则意图会更明确:
$level = $colorLevel['level'];
switch ($colorLevel['name'])
{
case 'ATTR_VPMCV13':
if (60 <= $level && $level <= 70) {
$prominentSideNumberArray[] = 8;
} elseif (80 <= $level) {
$prominentSideNumberArray[] = 10;
}
break;
case '...':
// ...
break;
default:
// ...
break;
}
答案 1 :(得分:0)
您可以使用三元运算符来实现此目的。请查看以下代码:
$prominentSideNumberArray[] = ((($colorLevel['name'] === 'ATTR_VPMCV13') &&
($colorLevel['level'] >= 80) )? 10 : (($colorLevel['name'] == 'ATTR_VPMCV13') &&
($colorLevel['level'] >= 60) && ($colorLevel['level'] <= 70)?8:"")) ;
编辑根据评论,您必须比较相同的值才能更好地定义名称
$color_name = "ATTR_VPMCV13";
if($colorLevel['name'] == $color_name )
$prominentSideNumberArray[] = (($colorLevel['level'] >= 80)? 10 : (
($colorLevel['level'] >= 60) && ($colorLevel['level'] <= 70)?8:"")) ;
DEMO使用不同的方法
修改强>
请注意,此解决方案的可读性低于if-else
语句。