31 $entry = array_pop($aArgs);
36 return $e->getMessage();
39 if (($entry < 0) || ($entry > 1)) {
43 $mArgs = self::percentileFilterValues($aArgs);
44 $mValueCount = count($mArgs);
45 if ($mValueCount > 0) {
48 $index = $entry * ($count - 1);
54 $iProportion =
$index - $iBase;
56 return $mArgs[$iBase] + (($mArgs[$iNext] - $mArgs[$iBase]) * $iProportion);
76 public static function PERCENTRANK($valueSet, $value, $significance = 3)
86 return $e->getMessage();
89 $valueSet = self::rankFilterValues($valueSet);
90 $valueCount = count($valueSet);
91 if ($valueCount == 0) {
94 sort($valueSet, SORT_NUMERIC);
96 $valueAdjustor = $valueCount - 1;
97 if (($value < $valueSet[0]) || ($value > $valueSet[$valueAdjustor])) {
101 $pos = array_search($value, $valueSet);
102 if ($pos ===
false) {
104 $testValue = $valueSet[0];
105 while ($testValue < $value) {
106 $testValue = $valueSet[++$pos];
109 $pos += (($value - $valueSet[$pos]) / ($testValue - $valueSet[$pos]));
112 return round($pos / $valueAdjustor, $significance);
130 $entry = array_pop($aArgs);
135 return $e->getMessage();
138 $entry = floor($entry);
140 if (($entry < 0) || ($entry > 1)) {
144 return self::PERCENTILE($aArgs, $entry);
158 public static function RANK($value, $valueSet, $order = self::RANK_SORT_DESCENDING)
168 return $e->getMessage();
171 $valueSet = self::rankFilterValues($valueSet);
172 if ($order === self::RANK_SORT_DESCENDING) {
173 rsort($valueSet, SORT_NUMERIC);
175 sort($valueSet, SORT_NUMERIC);
178 $pos = array_search($value, $valueSet);
179 if ($pos ===
false) {
190 function ($value):
bool {
191 return is_numeric($value) && !is_string($value);
200 function ($value):
bool {
201 return is_numeric($value);
static PERCENTRANK($valueSet, $value, $significance=3)
PERCENTRANK.
static rankFilterValues(array $dataSet)
const RANK_SORT_DESCENDING
const RANK_SORT_ASCENDING
static flattenArray($array)
Convert a multi-dimensional array to a simple 1-dimensional array.
static PERCENTILE(... $args)
PERCENTILE.
static RANK($value, $valueSet, $order=self::RANK_SORT_DESCENDING)
RANK.
static validateFloat($value)
static COUNT(... $args)
COUNT.
static percentileFilterValues(array $dataSet)
static QUARTILE(... $args)
QUARTILE.
static validateInt($value)
static flattenSingleValue($value='')
Convert an array to a single scalar value by extracting the first element.