0

基本上我想知道根据数组中定义的范围确定分数的最佳方法

我有一组介于 300 和 900 之间的值,每个值都有相应的百分位数范围。

我想创建一个函数,根据检查的值为您提供百分位数。传递给函数的值可能与数组中定义的值不匹配,但希望返回该值的最高百分位数。

例如在数组中会是这样的

'300'=>'10', '333'=>'11', '340' => '12'  .... '900'=>'100'

如果我传入 335,则该函数应返回 11。不确定最简单的方法。

4

3 回答 3

2

您可以轻松循环..但如果您不想这样做,那么您可以使用

$var = 335 ;
$array = array('300'=>'10', '333'=>'11', '340' => '12');
echo getPercentage($array,$var); 

输出

 11

使用的功能

function getPercentage(array $a, $v) {
    if (array_key_exists($v, $a)) {
        return $a[$v];
    }
    $a[$v] = null;
    ksort($a);
    $pos = array_search($v, array_keys($a));
    $pos = array_slice($a, (($pos == 0) ? 1 : $pos - 1), 1);
    return reset($pos);
}
于 2012-10-18T17:35:02.863 回答
0

如果数组是有序的,那就很简单了。如果您从底部开始(分数 = 300)然后向上直到您的分数大于数组分数,并且正确的百分位数是您在向上的过程中刚刚通过的百分位数。如果你从顶部开始,向下直到你的分数低于数组分数,正确的百分位数是你在向下的路上刚刚传递的那个。

根据分数从阵列的顶部或底部开始可能会给您带来轻微的性能提升。

于 2012-10-18T17:25:06.547 回答
0

你可以这样做:

<?php

function get_percentile($val){
    $arr = array('300'=>'10', '333'=>'11', '340'=>'12'); 
    while(!$arr[$val]){
        $val--;
    }
    return $arr[$val];
}

echo get_percentile(335);

?>

输出:
11

看看这个!

于 2012-10-18T17:28:38.033 回答