基本上我想知道根据数组中定义的范围确定分数的最佳方法
我有一组介于300和900之间的值,每个值都有相应的百分位数范围。
我想创建一个函数,根据检查的值为您提供百分位数。传递给函数的值可能与数组中定义的值不匹配,但希望返回该值的最高百分位数。
例如,在数组中将类似于
'300'=>'10', '333'=>'11', '340' => '12' .... '900'=>'100'
如果我传入335,则该函数应返回11.不确定最简单的方法。
答案 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! 强>