【问题标题】:How to write good if/else-if structures in PHP如何在 PHP 中编写好的 if/else-if 结构
【发布时间】:2017-11-11 12:22:47
【问题描述】:

PHP 方面的高手能帮我改正这段代码吗?我有一个问题,如果 level 大于 10,它会卡在 else if(level >= 10)

var level = m.level;

if(level < 10)
{
    level = '<span class="levelco">' + level + '</span>';
} 

else if(level >= 10)
{
    level = '<span class="levelco10">' + level + '</span>';
}        

else if(level >= 30)
{
    level = '<span class="levelco30">' + level + '</span>';
}            

else if(level >= 50)
{
    level = '<span class="levelco50">' + level + '</span>';
} 

else if(level >= 80)
{
    level = '<span class="levelco80">' + level + '</span>';
}

【问题讨论】:

  • 你有什么问题?
  • @saw303 问题很明显。假设level 的值为50,它只会执行10 级。

标签: javascript if-statement operators


【解决方案1】:

你也应该给上层并且也使用elseif,如果是PHP,因为这看起来像JavaScript:

var level = m.level;

if (level < 10) {
    level = '<span class="levelco">' + level + '</span>';
} else if (level >= 10 && level < 30) {
    level = '<span class="levelco10">' + level + '</span>';
} else if (level >= 30 && level < 50) {
    level = '<span class="levelco30">' + level + '</span>';
} else if (level >= 50 && level < 80) {
    level = '<span class="levelco50">' + level + '</span>';
} else if (level >= 80) {
    level = '<span class="levelco80">' + level + '</span>';
}

如果不可行,请颠倒条件:

var level = m.level;

if (level < 10) {
    level = '<span class="levelco">' + level + '</span>';
} else if (level >= 80) {
    level = '<span class="levelco80">' + level + '</span>';
} else if (level >= 50) {
    level = '<span class="levelco50">' + level + '</span>';
} else if (level >= 30) {
    level = '<span class="levelco30">' + level + '</span>';
} else if (level >= 10) {
    level = '<span class="levelco10">' + level + '</span>';
}

【讨论】:

    【解决方案2】:

    解决这个问题的方法有两种,但基本上到了第二种 if 会捕获以下所有条件(level >= 10 会匹配以下所有条件)。

    解决方案 1 只是重新排序条件。

    level = m.level;
    
    
    if(level < 10)
    {
        level = '<span class="levelco">' + level + '</span>';
    } 
    else if(level >= 80)
    {
        level = '<span class="levelco80">' + level + '</span>';
    }
    else if(level >= 50)
    {
        level = '<span class="levelco50">' + level + '</span>';
    } 
    else if(level >= 30)
    {
        level = '<span class="levelco30">' + level + '</span>';
    }    
    else if(level >= 10)
    {
        level = '<span class="levelco10">' + level + '</span>';
    }        
    

    选项 2 是对每个 if...设置一个限制

    level = m.level;
    
    
    if(level < 10)
    {
        level = '<span class="levelco">' + level + '</span>';
    } 
    
    else if(level >= 10 && level <30)
    {
        level = '<span class="levelco10">' + level + '</span>';
    }        
    
    else if(level >= 30 && level < 50)
    {
        level = '<span class="levelco30">' + level + '</span>';
    }            
    
    else if(level >= 50 && level < 80)
    {
        level = '<span class="levelco50">' + level + '</span>';
    } 
    
    else if(level >= 80)
    {
        level = '<span class="levelco80">' + level + '</span>';
    }
    

    【讨论】:

      【解决方案3】:

      一种方法是:

      var level = m.level;
      var levelclass = 'levelco';
      
      if(level >= 10) levelclass = 'levelco10';
      if(level >= 30) levelclass = 'levelco30';
      if(level >= 50) levelclass = 'levelco50';
      if(level >= 80) levelclass = 'levelco80';
      
      level = '<span class="' + levelclass + '">' + level + '</span>';
      

      反转它并使用else if 使其更高效,因为一旦满足条件它就会停止执行:

      if(level >= 80) levelclass = 'levelco80';
      else if(level >= 50) levelclass = 'levelco50';
      else if(level >= 30) levelclass = 'levelco30';
      else if(level >= 10) levelclass = 'levelco10';
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-13
        • 1970-01-01
        • 1970-01-01
        • 2016-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多