/** * Funkce pro porovnání 2 numerických veličin vyjádřených výčtem prvků */ public static function numericEnumsCoverage($enumArr1, $enumArr2, $coverageMode, $minusInf = -999999999, $plusInf = 999999999) { if (count($enumArr1) > 0 && count($enumArr2) > 0) { //shody hodnot $match1 = 0; foreach ($enumArr1 as $value1) { if (!array_search($value1, $enumArr2) === false) { $match1++; } } $match1 = $match1 / max(count($enumArr1), count($enumArr2)); //velikost mnozin //zjistime min a max u jednotlivych mnozin $min1 = 999999999; $max1 = -999999999; foreach ($enumArr1 as $value1) { if ($value1 < $min1) { $min1 = $value1; } if ($value1 > $max1) { $max1 = $value1; } } $min2 = 999999999; $max2 = -999999999; foreach ($enumArr2 as $value2) { if ($value2 < $min2) { $min2 = $value2; } if ($value2 > $max2) { $max2 = $value2; } } //porovname je jako intervaly $interval1 = new Interval($min1, $max1, true, true, $minusInf, $plusInf); $match2 = $interval1->containtsInterval(new Interval($min2, $max2, true, true, $minusInf, $plusInf)); return (2 * $match2 + $match1) / 3; } else { return 0; } }