我试图弄清楚如何将1到1000之间的数字映射到1到5之间的数字.
例如:
我有一个包含1000条记录的数据库,我想为每条记录分配1到5之间的id号.我不希望它是随机的,这很容易rand(1,5).
在Arduino语言中,它有一个我希望PHP具有的功能:
result = map(value, fromLow, fromHigh, toLow, toHigh)
Run Code Online (Sandbox Code Playgroud)
这样做的目的是我不想将该映射值存储在数据库中,我需要一个我可以调用的php函数,如果说db记录是100,无论函数调用的频率如何,它总是返回相同的映射值.
谢谢!
您正在寻找的地图功能使用不同的比例.所以这很容易做到:
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;
}
Run Code Online (Sandbox Code Playgroud)
所以基本上,它会重新定位该范围内的数字.现在,请注意,如果值在任一范围内,则不会检查错误.原因是它映射了尺度,而不是范围.所以你可以用它来进行基本转换:
$feet = map($inches, 0, 12, 0, 1);
Run Code Online (Sandbox Code Playgroud)
你也可以映射"范围",因为它重新定位数字(沿数字线移动):
5 == map(15, 10, 20, 0, 10);
Run Code Online (Sandbox Code Playgroud)
因此,对于范围(0,1000)和范围(0,5),下表将成立:
并显示重新基础,如果我们将(0,1000)映射到(5,10):
| 归档时间: |
|
| 查看次数: |
2796 次 |
| 最近记录: |