2014-06-04 15 views

cevap

13

İstatistiklerden beri bir süredir bu yüzden burada olabilirim - ama burada bir çatlak var.

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

Teşekkürler. Harika çalışıyor gibi görünüyor. – Garry

0

yanıt yukarıda daha yüksek yüzde değerine (100) kullanırsanız bir tanımlanmamış endeks bildirimi atabilseydin ve Excel PERCENTILE işlevine göre doğru değerleri döndürmez. see here an example of how it fails.

PHP'de Wikipedia İkinci değişkene göre bir işlev yazdım, Excel'de kullanılan. Bu işlev aynı zamanda yüzde olmayan bir değerden de (aralık dışı) korunur.

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; 
} 
İlgili konular