假设我有这一系列的数字:
$arr = [100, 60, 30, 22, 1]
它基于1 - 100
范围。我希望它基于1 - 5
范围。
我在这里找到了这个答案:How to scale down a range of numbers with a known min and max value详细说明:
Array.prototype.scaleBetween = function(scaledMin, scaledMax) {
var max = Math.max.apply(Math, this);
var min = Math.min.apply(Math, this);
return this.map(num => (scaledMax-scaledMin)*(num-min)/(max-min)+scaledMin);
}
但我不确定如何将其转换为PHP / Laravel。
答案 0 :(得分:2)
不确定这是否是正确的结果,但它符合您的描述:
$arr = [100, 60, 30, 22, 1];
function scale(array $array, float $min, float $max): array
{
$lowest = min($array);
$highest = max($array);
return array_map(function ($elem) use ($lowest, $highest, $min, $max) {
return ($max - $min) * ($elem - $lowest) / ($highest - $lowest) + $min;
}, $array);
}
echo json_encode(scale($arr, 1, 10));
// [10,6.363636363636363,3.6363636363636362,2.909090909090909,1]