【问题标题】:Is this the right way doing this?这是这样做的正确方法吗?
【发布时间】:2021-05-09 21:05:01
【问题描述】:

我有这个功能,我可以在其中输入几个值。我就是这样做的:

$alias = 11;
$row = ceil($alias / 8);
            switch ($row)
            {
                case 1:
                    return $alias + 10;
                case 2:
                    return $alias + 12;
                case 3:
                    return $alias + 14;
                case 4:
                    return $alias + 16;
                case 5:
                    return $alias + 18;
                case 6:
                    return $alias + 20;
                case 7:
                    return $alias + 22;
                default:

                break;
            }

我认为有更好的方法来做到这一点

【问题讨论】:

  • 你不需要在每个案件之后休息吗?
  • 为什么不使用 return $alias + 10 + ($row-1)*2 ?
  • @AhmedAlhameli 不,因为它使用的是return,所以不需要break 来跳过以下情况
  • 我在这里找到了几乎相同的问题stackoverflow.com/questions/6330114/…
  • 使用数学表达式,因为它有一个模式,我确认@Cris 所说的。

标签: php lookup-tables


【解决方案1】:

你可以用数学来解决这个问题。

return $alias + 10 + ((ceil($alias / 8)-1) * 2)

【讨论】:

    【解决方案2】:

    如果你仔细看你会发现有一个公式:

    $alias = 11;
    $row = ceil($alias / 8);
    switch ($row)
    {
        case 1:
            return $alias + 10;//(1*2-2)+10 = 0+10 = 10
        case 2:
            return $alias + 12;//(2*2-2)+10 = (4-2)+10 = 2+10 = 12
        case 3:
            return $alias + 14;//(3*2-2)+10 = (6-2)+10 = 4+10 = 14
        case 4:
            return $alias + 16;//(4*2-2)+10 = (8-2)+10 = 6+10 = 16
        case 5:
            return $alias + 18;//.
        case 6:
            return $alias + 20;//..
        case 7:
            return $alias + 22;//(7*2-2)+10 = (14-2)+10 = 12+10 = 22
        default:
    
        break;
    }
    

    所以按照公式($row*2-2)+10,然后 你的 switch 将变成一个简单的表达式:

    return $alias + ($row*2-2)+10;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      • 2016-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多