5

私はこのような配列を持っています

 array(
      45=>5,
      42=>4.9,
      48=>5,
      41=>4.8,
      40=>4.9,
      34=>4.9,
      .....
      )

ここで index はuserid彼のスコアで、value は彼のスコアです。

今私が望むのは、ユーザーのパーセンタイルを達成することです。たとえば、45,48 のパーセンタイルは 99 になり、42,40,34 は 97 になり、41 は 94 になります.

どうすればこれを達成できますか?

4

2 に答える 2

9
  1. 「スコア」に基づいて配列を昇順で並べ替えます
  2. パーセンタイル=(並べ替えられた配列内の要素のインデックス)* 100 /(配列内の要素の合計)

例:

<?php
$array = array(
      45=>5,
      42=>4.9,
      48=>5,
      41=>4.8,
      40=>4.9,
      34=>4.9,
      );

print("Unsorted array:<br/>");
print_r($array);
arsort($array);
print("<br/>");
print("Sorted array:<br/>");
print_r($array);
print("<br/>");

$i=0;
$total = count($array);
$percentiles = array();
$previousValue = -1;
$previousPercentile = -1;
foreach ($array as $key => $value) {
    echo "\$array[$key] => $value";
    if ($previousValue == $value) {
    $percentile = $previousPercentile;
    } else {
    $percentile = 99 - $i*100/$total;
    $previousPercentile = $percentile;
    }
    $percentiles[$key] = $percentile;
    $previousValue = $value;
    $i++;
}

print("Percentiles:<br/>");
print_r($percentiles);
print("<br/>");

?>
于 2012-08-23T11:01:54.163 に答える
1

はるかに簡単に行うことができます

function procentile($arr, $percentile=0.95){
    sort($arr);
    return $arr[round($percentile * count($arr) - 1.0-$percentile)];
}
于 2014-01-10T11:59:43.863 に答える