用数学替换elseifs

Dan*_*mak 3 php math if-statement

我的问题是如何用数学公式替换那些?

if ($l <= 3500)
{
    $min = 100;
}
elseif ($l <= 4000)
{
    $min = 120;
}
elseif ($l <= 4500)
{
    $min = 140;
}
elseif ($l <= 5000)
{
    $min = 160;
}
Run Code Online (Sandbox Code Playgroud)

如你所见,每500个级别提高20个.

Ben*_*aum 6

如你所见,每500个级别提高20个.

嗯,这就是你的公式.

$min = 100 + ceil(($l-3500)/500) * 20;
Run Code Online (Sandbox Code Playgroud)
  • 我们从100,我们的基值开始,并将其添加到计算的其余部分.
  • $l 从3500开始减去.
  • 我们ceil()的结果是因为我们只想在传递整个值时跳转.
  • 我们乘以20.

如果我们想要解决$l小于3500 的情况并将100设置为最小值,我们还需要$l-3500大于零的资产.我们可以这样做:

$min = 100 + ceil(max(0,$l-3500)/500) * 20;
Run Code Online (Sandbox Code Playgroud)

我是怎么到那儿的?

我们实际上在做的是绘制一条线.就像你自己说的那样,我们会为每一个不变的量持续量.我们这里有一些叫线性进展的东西.

太棒了,所以我们认识到了我们面临的问题.我们有一条想象线来绘制,我们想要整数值.接下来是什么?好吧,让我们看一下这条线的起点?

在你的情况下,答案非常简单.

if ($l <= 3500) {
    $min = 100;
}
Run Code Online (Sandbox Code Playgroud)

这是我们的出发点.所以我们知道我们的观点(3500,100).这意味着结果开始于100,原点开始于3500.

我们知道我们的公式是以.的形式出现的100+<something>.那是什么东西?

就像你说的那样,你每提升20个等级就有20个.所以我们知道我们20/500每移动1个等级(因为如果我们将它乘以500得到我们的原始规则).我们也知道(从以前)我们开始3500.

现在,我们可能很想使用$min = 100 + ($l-3500) * (20/500);,这几乎是正确的.这里唯一的问题是你只需要整数值.这就是为什么我们ceil将level/500的值仅用于整个步骤.

我尽量用尽可能少的数学术语来保持这个,你可以查看维基百科页面,如果你想要更正式的东西.如果您想要任何澄清 - 请告诉我

  • @PavelŠimerdaSO锁定你的downvotes以防止战略投票.这相当令人烦恼.不要担心,因为它已被接受,我并不真正关心声誉,唯一重要的是,相关用户得到的答案正确回答了问题,并解释了为什么会这样. (2认同)