使用数组来确定分数

时间:2012-10-18 17:18:59

标签: php

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

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

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

例如,在数组中将类似于

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

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

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

如果订购了数组,那就很简单了。如果你从底部开始(得分= 300),那么直到你的分数大于数组分数,并且正确的百分位数是你刚才通过的那个。如果你从顶部开始,向下走,直到你的分数低于阵列分数,并且正确的百分位数是你刚刚在路上传递的那个。

根据分数从阵列的顶部或底部开始可能会略微提升性能。

答案 2 :(得分: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

<强> Check it out!