我想弄清楚如何将 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),下表将适用:
并显示重新定位,如果我们将 (0, 1000) 映射到 (5, 10):
关于php - 使用 fromRange 和 toRange 映射一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7742959/