PHP:在无序数组中查找值的相对位置

PHP:在无序数组中查找值的相对位置,php,arrays,Php,Arrays,我有一个无序的数字数组,我想找到一个变量在这个数字范围内的位置,并将它表示为一个介于0和1之间的数字 如果变量是数组中的最大数字,则输出1 如果变量是数组中的最小数字,则输出0 如果变量位于数组中最高和最低数字的中间,则输出0.5 我打算使用min()和max()来找到数组的最高点和最低点,然后基于此运行计算。。。但我很难找到变量在数组中的位置,并将其表示为0到1之间的数字 例如: $my_array = array( 2.51, 3.63, 10.98, 6.39, 1.54, 6.02

我有一个无序的数字数组,我想找到一个变量在这个数字范围内的位置,并将它表示为一个介于0和1之间的数字

  • 如果变量是数组中的最大数字,则输出1
  • 如果变量是数组中的最小数字,则输出0
  • 如果变量位于数组中最高和最低数字的中间,则输出0.5
我打算使用
min()
max()
来找到数组的最高点和最低点,然后基于此运行计算。。。但我很难找到变量在数组中的位置,并将其表示为0到1之间的数字

例如:

$my_array = array( 2.51, 3.63, 10.98, 6.39, 1.54, 6.02 );

$find_this = 3.63;

function compare_to_range {
  $highest = max($my_array);
  $lowest = min($my_array);

  Something to show where $find_this sits within those two points.
}

如果您只想知道这个数字与其他数字相比有多大(而不是找到它在数组中的位置),那么计算
($find_this-$lower)/($highest-$lower)
应该可以


它返回0表示最小值,1表示最大值,以及所有其他值的比率(该值的值正好是最小值和最大值的平均值,得到0.5)。

如果您只想知道该数字与其他数字相比有多大(而不是找到它在数组中的位置),请计算
($find_this-$lower)/($high-$lower)
应该可以


它返回0表示最小值,1表示最大值,以及所有其他值的比率(该值的平均值正好是最小值和最大值的平均值,得到0.5)。

什么意思
显示$find_在这两个点内的位置。
?根据您的上述解释,如果
3.63
不是最高或最低值,您说您想返回
0.5
?您说的
什么意思是显示$find\u在这两个点内的位置。
?根据您的上述解释,如果
3.63
不是最高值或最低值,您说过要返回
0.5
?问这个问题我觉得很愚蠢,但我想不通。在我的量表上,我总是需要1表示“好”,0表示“坏”。如果需要一个更高的数字(例如比较速度),您的计算将非常完美,因为数组中的最高数字将始终得分1。但是现在我需要在相同的尺度上(1=好,0=坏)进行计算,其中一个范围内的最低数字是可取的(例如,比较价格,越低越好),因此这次数组中的最低数字应该总是得分1,最高数字应该得分0。我认为
($find_this-$hist)/($lost-$hist)
应该有效。您可以想象第一个答案是将范围移向零(最低值将变为0),然后将其规格化(使最大值为1)。这是类似的-我们将范围移向零,但当我们想要反转它时,我们将其移过零(最高值移到0)。然后我们也将其正常化,但由于我们不希望答案是否定的,我们正在除以一个负数(最低-最高),我觉得问这个问题很愚蠢,但我想不出来。在我的量表上,我总是需要1表示“好”,0表示“坏”。如果需要一个更高的数字(例如比较速度),您的计算将非常完美,因为数组中的最高数字将始终得分1。但是现在我需要在相同的尺度上(1=好,0=坏)进行计算,其中一个范围内的最低数字是可取的(例如,比较价格,越低越好),因此这次数组中的最低数字应该总是得分1,最高数字应该得分0。我认为
($find_this-$hist)/($lost-$hist)
应该有效。您可以想象第一个答案是将范围移向零(最低值将变为0),然后将其规格化(使最大值为1)。这是类似的-我们将范围移向零,但当我们想要反转它时,我们将其移过零(最高值移到0)。然后我们也将其标准化,但因为我们不希望答案是负数,所以我们用负数除以(最低-最高)