gpt4 book ai didi

php - 使用 fromRange 和 toRange 映射一个值?

转载 作者:行者123 更新时间:2023-12-01 08:17:20 24 4
gpt4 key购买 nike

我想弄清楚如何将 1 到 1000 之间的数字映射到 1 到 5 之间的数字。

例如:

我有一个包含 1000 条记录的数据库,我想为每条记录分配一个 1 到 5 之间的 ID 号。我不希望它是随机的,这很容易使用 rand(1,5) .

在 Arduino 语言中,它具有我希望 PHP 具有的功能:

result = map(value, fromLow, fromHigh, toLow, toHigh)

这样做的目的是我不想将该映射值存储在数据库中,我需要一个可以调用的 php 函数,如果说 db 记录为 100,无论该函数被调用的频率如何,它都将始终返回相同的映射值。

谢谢!

最佳答案

您正在寻找 map 范围的函数使用不同的比例。所以这很容易做到:

function map($value, $fromLow, $fromHigh, $toLow, $toHigh) {
$fromRange = $fromHigh - $fromLow;
$toRange = $toHigh - $toLow;
$scaleFactor = $toRange / $fromRange;

// Re-zero the value within the from range
$tmpValue = $value - $fromLow;
// Rescale the value to the to range
$tmpValue *= $scaleFactor;
// Re-zero back to the to range
return $tmpValue + $toLow;
}

所以基本上,它会重新设置范围内的数字。现在,请注意,如果值在任一范围内,都不会进行错误检查。原因是它映射比例,而不是范围。因此,您可以将其用于基础转换:
$feet = map($inches, 0, 12, 0, 1);

你也可以映射“范围”,因为它重新设置了数字(沿着数字线移动):
5 == map(15, 10, 20, 0, 10);

因此,对于从范围 (0, 1000) 到范围 (0, 5),下表将适用:
  • -200 | -1
  • 0 | 0
  • 1 | 0.005
  • 100 | 0.5
  • 200 | 1
  • 400 | 2
  • 600 | 3
  • 800 | 4
  • 1000 | 5
  • 2000 | 10
  • 3000 | 15

  • 并显示重新定位,如果我们将 (0, 1000) 映射到 (5, 10):
  • -200 | 4
  • 0 | 5
  • 1 | 5.005
  • 100 | 5.5
  • 200 | 6
  • 400 | 7
  • 600 | 8
  • 800 | 9
  • 1000 | 10
  • 2000 | 15
  • 3000 | 20
  • 关于php - 使用 fromRange 和 toRange 映射一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7742959/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com