アップデート:
これで、実際に何が必要かがわかりました。次の式を使用する必要があります。
(new_max - new_min)(x - min)
f(x) = ---------------------------- + new_min
max - min
例えば:
$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);
例:http ://codepad.viper-7.com/hwGnhJ
古い答え:
array_walk
、およびmin
/max
を使用できます。
$a = [1, 2, 1000];
array_walk($a, function(&$value) {
$value = max(min($value, 100), 1);
});
var_dump($a);
例:http ://codepad.viper-7.com/jjOCjx
または単に単純foreach
でif
:
foreach ($a as $i => $v) {
if ($v > 100) $a[$i] = 100;
elseif ($v < 1) $a[$i] = 1;
}