用php表示的评分参考值(最小x=1,最大y=100)

用php表示的评分参考值(最小x=1,最大y=100),php,math,max,min,scoring,Php,Math,Max,Min,Scoring,我想做一个小计分,但我在数学方面有点磕磕绊绊。我想你会处理它:-)我有几个值:例如124426100,24,41。最高的外壳应为MaxScore=100(此处为426),最低的MinScore=1(此处为24)。MaxScore和MinScore shell之间的每个值(这里是124100,41)都有一个自己的分数,与最小值和最大值相关 使用php max(),我可以 426作为最高值和最小值() 24作为最低值。好的 下一步可能是:426=100和24=1。其余的呢?计算结果是什么?正如你所看

我想做一个小计分,但我在数学方面有点磕磕绊绊。我想你会处理它:-)我有几个值:例如124426100,24,41。最高的外壳应为MaxScore=100(此处为426),最低的MinScore=1(此处为24)。MaxScore和MinScore shell之间的每个值(这里是124100,41)都有一个自己的分数,与最小值和最大值相关

使用php max(),我可以

426作为最高值和最小值()

24作为最低值。好的


下一步可能是:426=100和24=1。其余的呢?计算结果是什么?正如你所看到的,这不是一个程序员的问题(还没有),而是一个数学问题。我希望我已经说清楚了。谢谢大家!

您可以做的一件事是将每个值应用于
$val*($max-$min)/100

我把它倒过来了。它将是
$val/($max-$min)/100)
这将
$min
$max
之间的差值的比率分为100个部分。因此,每一块都将应用一个比率。这将使100成为
100/((426-24)/100)=24.875
,并将所有值减少到1到100之间的数字

编辑。要使最小值为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
)

好的,这似乎有效。可能放了比需要更多的括号

$new_val = 1 + (($val - $min) * (99 / ($max - $min)))

如果您想考虑完整的分布,而不仅仅是最小值/最大值,那么您需要做更多的工作。请说明这是否更可取。但他希望最小值(在本例中为24)为1。你的公式将使最小值约为6ish,对吗?是的,将426减少到100,将24减少到1将需要一个不同的函数。而每一个的比例会有所不同。如果我们完全按照要求去做的话,不确定它是否能准确地描绘出彼此之间的原始分数。我以为他们不知道自己想要什么,只是想出了一个办法,让所有的数字都在一个偶数比例的范围内。我们需要在公式中加一个常数。所以-
max(abs(0-$max/($max-$min)/100)),abs(0-$min/($max-$min)/100))
max可能不是必需的。让我检查一下我的数学。好的,这似乎可行。。。1+($val-$min)*(99/($max-$min)))是的,就是它!太棒了,你让我很开心。。。或者晚上。非常感谢你!来自柏林的问候!晚安没问题,我喜欢算出这些数学公式。
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
)
$new_val = 1 + (($val - $min) * (99 / ($max - $min)))