我想做一个小小的得分,但我偶然发现数学。我想你会处理它:-)我有几个值:例如 124,426,100,24,41 。最高的shell是MaxScore = 100(此处为426),最小MinScore = 1(此处为24)。 MaxScore 和 MinScore shell之间的每个值(此处为124,100,41)都会得到一个自己的分数,与最小值和最大值相关。
使用php max(),我得到了
$max = max(124, 426, 100, 24, 41);
426 为最高, min()
$min = min(124, 426, 100, 24, 41);
24 为最低值。精细。
下一步可能是:426 = 100和24 = 1.但其余的?计算的是什么?正如您所看到的,它不是程序员问题(尚未),而是数学问题。我希望我确实让自己清楚了。谢谢!
答案 0 :(得分:2)
好的,这似乎有效。可能需要更多括号。
$new_val = 1 + (($val - $min) * (99 / ($max - $min)))
答案 1 :(得分:1)
您可以做的一件事就是将每个值应用为$val * ($max - $min) / 100;
$val / (($max - $min) / 100);
这将$min
和$max
之间的差异除以100个。因此每件作品都会应用它。这将使100为100 / ((426 - 24) / 100) = 24.875
,并且它会将所有值减少到1到100之间的数字。
EDIT。要使min为1且最大值为100并保持分数之间的关系,我们需要应用比率并减去一个常数。
验证Andrew Nee的评论似乎可以解决问题。
php -r "$a = array(123,426,100,24,41);print_r(array_map(function($val){$min=24;$max=426;return 1 + (($val - $min) * (99/($max - $min)));},$a));"
Array
(
[0] => 25.380597014925
[1] => 100
[2] => 19.716417910448
[3] => 1
[4] => 5.1865671641791
)