我的问题是如何用数学公式来代替那些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/