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 に答える