将已知最大最小值的数字缩小到PHP中的新最大最小值

时间:2018-04-19 20:09:59

标签: php math

假设我有这一系列的数字:

$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。

1 个答案:

答案 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]