基本上我想知道根据数组中定义的范围确定分数的最佳方法
我有一组介于 300 和 900 之间的值,每个值都有相应的百分位数范围。
我想创建一个函数,根据检查的值为您提供百分位数。传递给函数的值可能与数组中定义的值不匹配,但希望返回该值的最高百分位数。
例如在数组中会是这样的
'300'=>'10', '333'=>'11', '340' => '12' .... '900'=>'100'
如果我传入 335,则该函数应返回 11。不确定最简单的方法。
基本上我想知道根据数组中定义的范围确定分数的最佳方法
我有一组介于 300 和 900 之间的值,每个值都有相应的百分位数范围。
我想创建一个函数,根据检查的值为您提供百分位数。传递给函数的值可能与数组中定义的值不匹配,但希望返回该值的最高百分位数。
例如在数组中会是这样的
'300'=>'10', '333'=>'11', '340' => '12' .... '900'=>'100'
如果我传入 335,则该函数应返回 11。不确定最简单的方法。
您可以轻松循环..但如果您不想这样做,那么您可以使用
$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);
}
如果数组是有序的,那就很简单了。如果您从底部开始(分数 = 300)然后向上直到您的分数大于数组分数,并且正确的百分位数是您在向上的过程中刚刚通过的百分位数。如果你从顶部开始,向下直到你的分数低于数组分数,正确的百分位数是你在向下的路上刚刚传递的那个。
根据分数从阵列的顶部或底部开始可能会给您带来轻微的性能提升。
你可以这样做:
<?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