douxian1939 2012-07-23 06:06
浏览 47
已采纳

如何在一个范围内创建一个整数数组?

Just say I want to take an array of numbers:

$a['a'] = 10;
$a['b'] = 20;
$a['c'] = 500;
$a['d'] = 1000;

And force them to fit within a range (e.g. 1 to 100) like so:

$a['a'] = 1;
$a['b'] = 2;
$a['c'] = 50;
$a['d'] = 100;

Another example...

From:

$a['a'] = 12;
$a['b'] = 28;

To:

$a['a'] = 1;
$a['b'] = 100;

What's the best way to go about it?

  • 写回答

2条回答 默认 最新

  • doutan2456 2012-07-23 06:10
    关注

    Update:

    Now I understand what you actually want, you need to use this formula:

           (new_max - new_min)(x - min)
    f(x) = ----------------------------  + new_min
                    max - min
    

    E.g.:

    $a = [
        'a' => 10,
        'b' => 20,
        'c' => 500,
        'd' => 1000,
    ];
    $min = min($a);
    $max = max($a);
    $new_min = 1;
    $new_max = 100;
    foreach ($a as $i => $v) {
        $a[$i] = ((($new_max - $new_min) * ($v - $min)) / ($max - $min)) + $new_min;
    }
    var_dump($a);
    

    Example: http://codepad.viper-7.com/hwGnhJ


    Old answer:

    You can use array_walk, and min/max for that:

    $a = [1, 2, 1000];
    array_walk($a, function(&$value) {
        $value = max(min($value, 100), 1);
    });
    var_dump($a);
    

    Example: http://codepad.viper-7.com/jjOCjx

    Or just a simple foreach and if:

    foreach ($a as $i => $v) {
        if ($v > 100) $a[$i] = 100;
        elseif ($v < 1) $a[$i] = 1;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据