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

use*_*562 1 php arrays normalization

只是说我想要一组数字:

$a['a'] = 10;
$a['b'] = 20;
$a['c'] = 500;
$a['d'] = 1000;
Run Code Online (Sandbox Code Playgroud)

并迫使它们适合范围(例如1到100),如下所示:

$a['a'] = 1;
$a['b'] = 2;
$a['c'] = 50;
$a['d'] = 100;
Run Code Online (Sandbox Code Playgroud)

另一个例子...

从:

$a['a'] = 12;
$a['b'] = 28;
Run Code Online (Sandbox Code Playgroud)

至:

$a['a'] = 1;
$a['b'] = 100;
Run Code Online (Sandbox Code Playgroud)

什么是最好的方法呢?

Pet*_*tah 7

更新:

现在我明白了你真正想要的东西,你需要使用这个公式:

       (new_max - new_min)(x - min)
f(x) = ----------------------------  + new_min
                max - min
Run Code Online (Sandbox Code Playgroud)

例如:

$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);
Run Code Online (Sandbox Code Playgroud)

示例:http://codepad.viper-7.com/hwGnhJ


老答案:

您可以使用array_walkmin/ max为此:

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

示例:http://codepad.viper-7.com/jjOCjx

或者只是一个简单的foreachif:

foreach ($a as $i => $v) {
    if ($v > 100) $a[$i] = 100;
    elseif ($v < 1) $a[$i] = 1;
}
Run Code Online (Sandbox Code Playgroud)