1

数値の配列を取りたいと言うだけです:

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

そして、次のように範囲内 (例: 1 から 100) に収まるように強制します。

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

もう一つの例...

から:

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

に:

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

それについて行く最善の方法は何ですか?

4

2 に答える 2

7

アップデート:

これで、実際に何が必要かがわかりました。次の式を使用する必要があります。

       (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

または単に単純foreachif

foreach ($a as $i => $v) {
    if ($v > 100) $a[$i] = 100;
    elseif ($v < 1) $a[$i] = 1;
}
于 2012-07-23T06:10:37.873 に答える
0

こんにちは、次の方法でこれを行うことができます。

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

$range =10; // you can define the range here which you want.


foreach($a as $k=>$v)
{

    $a[$k] = $v/$range;

}

print_r($a);
于 2012-07-23T06:21:08.397 に答える