Non puoi selezionare più di 25 argomenti
Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
163 righe
5.6 KiB
163 righe
5.6 KiB
<? |
|
|
|
class tuttogareMath { |
|
public static function inversamenteProporzionale(array $valori, $peso = 1, $decimali = 3) { |
|
$min = min($valori); |
|
$chiavi = array_keys($valori); |
|
$punteggi = []; |
|
foreach ($chiavi as $chiave) { |
|
$punteggio_ottenuto = 0; |
|
if ($valori[$chiave] != 0) { $punteggio_ottenuto = $min * $peso / $valori[$chiave]; } |
|
if (isset($decimali)) { |
|
$punteggi[$chiave] = truncate($punteggio_ottenuto,$decimali); |
|
} else { |
|
$punteggi[$chiave] = $punteggio_ottenuto; |
|
} |
|
} |
|
if (empty($punteggi)) { $punteggi = false; } |
|
return $punteggi; |
|
} |
|
|
|
public static function proporzionale(array $valori, $peso = 1, $decimali = 3) { |
|
$max = max($valori); |
|
$chiavi = array_keys($valori); |
|
$punteggi = []; |
|
foreach ($chiavi as $chiave) { |
|
$punteggio_ottenuto = 0; |
|
if ($max>0) { $punteggio_ottenuto = $valori[$chiave] * $peso / $max; } |
|
if (isset($decimali)) { |
|
$punteggi[$chiave] = truncate($punteggio_ottenuto,$decimali); |
|
} else { |
|
$punteggi[$chiave] = $punteggio_ottenuto; |
|
} |
|
} |
|
if (empty($punteggi)) { $punteggi = false; } |
|
return $punteggi; |
|
} |
|
|
|
public static function lineareSemplice(array $valori,$peso=1,$decimali=3,$options="") { |
|
$chiavi = array_keys($valori); |
|
$punteggi = []; |
|
foreach ($chiavi as $chiave) { |
|
$punteggi[$chiave] = $peso * (($options["prezzoBase"] - $valori[$chiave])/($options["prezzoBase"] - $options["prezzoSoglia"])); |
|
if (isset($decimali)) { |
|
$punteggi[$chiave] = truncate($punteggi[$chiave],$decimali); |
|
} else { |
|
$punteggi[$chiave] = $punteggi; |
|
} |
|
} |
|
if (empty($punteggi)) { $punteggi = false; } |
|
return $punteggi; |
|
} |
|
|
|
public static function incrementoLineare(array $valori,$peso=1,$decimali=3) { |
|
$max = max($valori); |
|
$min = min($valori); |
|
$punteggio_max = $peso; |
|
$punteggio_min = $min * $peso / $max; |
|
$chiavi = array_keys($valori); |
|
$punteggi = []; |
|
foreach($chiavi AS $chiave) { |
|
$valore = $valori[$chiave]; |
|
$punteggi[$chiave] = $punteggio_max - ((($punteggio_max - $punteggio_min) / ($max - $min)) * ($valore - $min)); |
|
$punteggi[$chiave] = ($punteggi[$chiave] > $punteggio_max) ? $punteggio_max : $punteggi[$chiave]; |
|
if (isset($decimali)) { |
|
$punteggi[$chiave] = truncate($punteggi[$chiave],$decimali); |
|
} else { |
|
$punteggi[$chiave] = $punteggi; |
|
} |
|
} |
|
if (empty($punteggi)) { $punteggi = false; } |
|
return $punteggi; |
|
} |
|
|
|
public static function onOff(array $valori,$peso=1) { |
|
$punteggi = []; |
|
foreach ($valori as $chiave => $valore) { |
|
$punteggi[$chiave] = 0; |
|
if (!empty($valore)) { $punteggi[$chiave] = $peso; } |
|
} |
|
if (empty($punteggi)) { $punteggi = false; } |
|
return $punteggi; |
|
} |
|
|
|
public static function tabellare(array $valori,array $options,$max = null, $decimali = null) { |
|
$chiavi = array_keys($valori); |
|
$ranges = $options["range"]; |
|
$punteggi = []; |
|
if (!empty($ranges)) { |
|
foreach ($chiavi as $chiave) { |
|
$valore = $valori[$chiave]; |
|
$punteggi[$chiave] = 0; |
|
foreach($ranges AS $range) { |
|
if ($valore >= $range["min"] && ($valore <= $range["max"] || empty($range["max"]))) { $punteggi[$chiave] = $range["punteggio"]; } |
|
} |
|
} |
|
} |
|
if (empty($punteggi)) { |
|
$punteggi = false; |
|
} else { |
|
if (!empty($options["riparametra"]) && $options["riparametra"] == "S" && !empty($max)) { |
|
$punteggi = self::proporzionale($punteggi,$max ?? 1,$decimali ?? 3); |
|
} |
|
} |
|
return $punteggi; |
|
} |
|
|
|
public static function bilineare(array $valori,$peso=1,$decimali=3,$options="") { |
|
$max = max($valori); |
|
$media = array_sum($valori)/count($valori); |
|
$chiavi = array_keys($valori); |
|
$punteggi = []; |
|
foreach ($chiavi as $chiave) { |
|
$punteggio_ottenuto = 0; |
|
$valore = $valori[$chiave]; |
|
if ($max>0) { |
|
if ($valore > $media) { |
|
$punteggio_ottenuto = ($options + (1 - $options) * (($valore - $media) / ($max - $media))) * $peso; |
|
} else { |
|
$punteggio_ottenuto = ($options * ($valore / $media)) * $peso; |
|
} |
|
} |
|
if (isset($decimali)) { |
|
$punteggi[$chiave] = truncate($punteggio_ottenuto,$decimali); |
|
} else { |
|
$punteggi[$chiave] = $punteggio_ottenuto; |
|
} |
|
} |
|
if (empty($punteggi)) { $punteggi = false; } |
|
return $punteggi; |
|
} |
|
|
|
public static function quadratica(array $valori,$peso=1,$decimali=3,$options="") { |
|
$max = max($valori); |
|
$chiavi = array_keys($valori); |
|
$punteggi = []; |
|
foreach ($chiavi as $chiave) { |
|
$punteggio_ottenuto = 0; |
|
if ($max>0) { $punteggio_ottenuto = pow(($valori[$chiave] / $max),$options) * $peso; } |
|
if (isset($decimali)) { |
|
$punteggi[$chiave] = truncate($punteggio_ottenuto,$decimali); |
|
} else { |
|
$punteggi[$chiave] = $punteggio_ottenuto; |
|
} |
|
} |
|
if (empty($punteggi)) { $punteggi = false; } |
|
return $punteggi; |
|
} |
|
|
|
public static function convertInversaForScore($valori,$riferimento) { |
|
$return = []; |
|
foreach($valori AS $id => $valore) { |
|
$return[$id] = 100 - (($valore * 100) / $riferimento); |
|
} |
|
return $return; |
|
} |
|
|
|
public static function getFormule() { |
|
global $config; |
|
return jsonToArray($config["jsonFolder"]."/math-formule.json"); |
|
} |
|
} |
|
|
|
?>
|