php - 用数学替换 elseif

标签 php math if-statement

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

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

如您所见,每 500 级提高 20。

最佳答案

As you see this is raising 20 for every 500 levels.

嗯,这就是你的公式。

$min = 100 + ceil(($l-3500)/500) * 20;
  • 我们从 100 开始,这是我们的基础值,并将其添加到其余计算中。
  • $l从少 3500 开始。
  • 我们 ceil()结果是因为我们只想在传递整个值时跳转。
  • 我们将其乘以 20。

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

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

我是怎么到达那里的?

我们实际上正在做的是绘制一条线。就像您自己说的那样,我们对每个恒定量都采用恒定量。我们这里有一种叫做线性进展的东西。

太好了,所以我们认识到了我们面临的问题。我们有一条要绘制的假想线,我们需要整数值。接下来是什么?好吧,让我们看看这条线从哪里开始?

对于您的情况,答案非常简单。

if ($l <= 3500) {
    $min = 100;
}

这是我们的出发点。所以我们知道要点(3500,100)在我们的线上。这意味着结果从 100 开始原点开始于 3500 .

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

就像你说的,每 500 级你提高 20。所以我们知道我们移动 20/500对于每 1 个级别(因为好吧,如果我们将其乘以 500,我们将得到原始规则)。我们也知道(从之前)我们从 3500 开始.

现在,我们可能会想使用 $min = 100 + ($l-3500) * (20/500);几乎是对的。这里唯一的问题是您只需要整数值。这就是为什么我们 ceil level/500 的值只得到整个步骤。

我试着用尽可能少的数学术语来保持这一点,你可以查看 the wikipedia page如果你想要更正式的东西。如果您需要任何说明 - 让我知道

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

相关文章:

jQuery IF 值等于显示 Else 显示

ios - 对象 C : Checking against an integer in NSUserDefaults

php - 消息库、My_Controller 和 __remap 问题

php - Wordpress 表单未提交

php - 将音乐文件上传到服务器但限制下载?

php - 覆盖 Magento 联系人 Controller

algorithm - 计算得分最高的项目的最佳算法是什么?

c# - 如何模拟由给定信号驱动的谐波振荡器(不是由正弦波驱动)

algorithm - 重新缩放整数向量

python - 具有优先级/顺序的循环