Search code examples
phpoptimizationfractions

How optimize function of counting fractions?


I write function which gets one array from 3 elements (integer, numerator and denominator). It calculate wrong fractions to normal (numerator>denominator).

How optimize this function? I understand that I make many verification, but function looks ugly.

function calculate_measurement(array $m): array
        {
            if (isset($m[NUMERATOR]) && isset($m[DENOMINATOR])) {
                while (intval($m[NUMERATOR]) >= intval($m[DENOMINATOR])) {
                    $m[NUMERATOR] -= $m[DENOMINATOR];
                    if (!isset($m[INTEGER])) {
                        $m[INTEGER] = 0;
                    }
                    ++$m[INTEGER];
                }

                if (0 === $m[NUMERATOR]) {
                    $m[NUMERATOR] = null;
                    $m[DENOMINATOR] = null;
                }
            }

            return $m;
        }

Solution

  • A loop isn't necessary, just calculate the integer and the new numerator. Something like this should do it:

    function calculate_measurement(array $m): array {
        if (!isset($m[NUMERATOR]) || !isset($m[DENOMINATOR])) {
            return $m;
        }
    
        $m[INTEGER] = intval($m[NUMERATOR] / $m[DENOMINATOR]);
        $m[NUMERATOR] -= ($m[INTEGER] * $m[DENOMINATOR]);
    
        if ($m[NUMERATOR] === 0) {
            $m[NUMERATOR] = null;
            $m[DENOMINATOR] = null; 
        }
    
        return $m;
    }