2014-06-04 8 views

risposta

13

È passato un po 'di tempo dalle statistiche, quindi potrei essere qui - ma qui c'è una crepa.

function get_percentile($percentile, $array) { 
    sort($array); 
    $index = ($percentile/100) * count($array); 
    if (floor($index) == $index) { 
     $result = ($array[$index-1] + $array[$index])/2; 
    } 
    else { 
     $result = $array[floor($index)]; 
    } 
    return $result; 
} 

$scores = array(22.3, 32.4, 12.1, 54.6, 76.8, 87.3, 54.6, 45.5, 87.9); 

echo get_percentile(75, $scores); 
echo get_percentile(90, $scores); 
+0

Grazie. Sembra funzionare bene. – Garry

0

La risposta di cui sopra potrebbe gettare un avviso indice indefinito se si utilizza il valore per cento più alto (100) e non restituisce valori corretti in base alla funzione di Excel percentile. È possibile see here an example of how it fails.

Ho scritto una funzione in PHP secondo il Wikipedia Secondo varitant, che è quello utilizzato in Excel. Anche questa funzione è protetta da un valore non percentuale (fuori intervallo).

function getPercentile($array, $percentile) 
{ 
    $percentile = min(100, max(0, $percentile)); 
    array_values($array); 
    sort($array); 
    $index = ($percentile/100) * (count($array) - 1); 
    $fractionPart = $index - floor($index); 
    $intPart = floor($index); 

    $percentile = $array[$intPart]; 
    $percentile += ($fractionPart > 0) ? $fractionPart * ($array[$intPart + 1] - $array[$intPart]) : 0; 

    return $percentile; 
}