在php中使用数组查找百分位数

Aja*_*yan 5 php arrays arraylist percentile

我有这样的数组

 array(
      45=>5,
      42=>4.9,
      48=>5,
      41=>4.8,
      40=>4.9,
      34=>4.9,
      .....
      )
Run Code Online (Sandbox Code Playgroud)

这里索引是userid和值是他的分数.

现在我想要的是达到用户的百分位数,例如45,48的百分位数将是99而42,40,34将是97而41将是94.

我怎么能做到这一点?

Sam*_*eer 8

  1. 根据"得分"升序对数组进行排序
  2. Percentile =(排序数组中元素的索引)*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/>");

?>
Run Code Online (Sandbox Code Playgroud)