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

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

正如你所看到的,每500层就要提高20层。

最佳答案

正如你所看到的,每500层就要提高20层。
好吧,这就是你的公式。

$min = 100 + ceil(($l-3500)/500) * 20;

我们从100开始,我们的基础值,然后把它加到剩下的计算中。
$l从3500以下开始。
结果,因为我们只想在传递整个值时跳转。
我们把它乘以20。
如果我们想解决ceil()小于3500并将100设为最小值的情况,我们还需要资产$l大于零。我们可以这样做:
$min = 100 + ceil(max(0,$l-3500)/500) * 20;

我是怎么到那里的?
我们实际上是在画一条线。就像你自己说的,我们对每一个常数都取一个常数。我们这里有一个叫做线性级数的东西。
太好了,所以我们意识到我们面临的问题。我们要画一条虚线,我们要整数值。接下来呢?好吧,让我们看看队伍从哪里开始?
在你的情况下,答案很简单。
if ($l <= 3500) {
    $min = 100;
}

这是我们的出发点。所以我们知道$l-3500点在我们的线上。这意味着结果从(3500,100)开始,原点从100开始。
我们知道我们的公式的形式是3500。什么东西?
就像你说的,每提高500个等级你就要提高20个。所以我们知道每1级移动100+<something>(因为,如果我们把它乘以500,我们就得到了原来的规则)。我们也知道(从前)我们从20/500开始。
现在,我们可能会尝试使用3500,这几乎是正确的。这里唯一的问题是你只想要整数值。这就是为什么我们$min = 100 + ($l-3500) * (20/500);级别/500的值只得到整个步骤。
我试着用尽可能少的数学术语,如果你想要更正式的东西,可以检查the wikipedia page。如果你想澄清一下-告诉我

关于php - 用数学替换elseifs,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19474691/

10-09 09:13