You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何将已知最值的数字数组缩放到新的数值范围

把JavaScript数组缩放逻辑转换为PHP实现

没问题,我来帮你把这个JavaScript的数组缩放功能转换成PHP代码,完全复刻原逻辑,还会处理边界情况哦~

原逻辑回顾

先确认下原JS函数的核心逻辑:

  1. 找到原数组的最大值和最小值
  2. 对数组中的每个元素应用线性缩放公式,将其映射到目标范围 [scaledMin, scaledMax]
    公式:(scaledMax - scaledMin) * (当前元素 - 原最小值) / (原最大值 - 原最小值) + scaledMin

PHP 实现代码

这里我写了一个可复用的PHP函数,和原JS逻辑完全对齐,还处理了数组所有元素相同的边界情况(避免除以0):

function scaleBetween(array $arr, int $scaledMin, int $scaledMax): array
{
    $min = min($arr);
    $max = max($arr);

    // 处理所有元素相同的情况,避免除以0
    if ($max === $min) {
        return array_fill(0, count($arr), $scaledMin);
    }

    return array_map(function ($num) use ($min, $max, $scaledMin, $scaledMax) {
        return ($scaledMax - $scaledMin) * ($num - $min) / ($max - $min) + $scaledMin;
    }, $arr);
}

示例用法

用你给出的数组 [100, 60, 30, 22, 1] 测试,缩放到1-5范围:

$arr = [100, 60, 30, 22, 1];
$scaledArr = scaleBetween($arr, 1, 5);

// 打印结果
print_r($scaledArr);

输出结果(保留小数的话会是这样,你可以根据需求用round()取整):

Array
(
    [0] => 5
    [1] => 3.4242424242424
    [2] => 2.2727272727273
    [3] => 1.9393939393939
    [4] => 1
)

如果需要整数结果,只需要在映射函数里套个round():

return round(($scaledMax - $scaledMin) * ($num - $min) / ($max - $min) + $scaledMin);

这样就能得到整数版本的缩放数组啦~

内容的提问来源于stack exchange,提问作者test

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:09:30