По крайней мере, вы можете переписать функцию следующим образом:
function calculate_measurement(array $m): array
{
if (!isset($m[INTEGER])) {
$m[INTEGER] = 0;
}
if (!isset($m[NUMERATOR]) || !isset($m[DENOMINATOR])) {
return $m;
}
while (intval($m[NUMERATOR]) >= intval($m[DENOMINATOR])) {
$m[NUMERATOR] -= $m[DENOMINATOR];
++$m[INTEGER];
}
if (0 === $m[NUMERATOR]) {
$m[NUMERATOR] = null;
$m[DENOMINATOR] = null;
}
return $m;
}
Я не понимаю использование intval ().Может ли числитель / знаменатель быть нецелыми?Я бы предпочел видеть такие функции:
function calculate_measurement(int $i, int $numerator, int $denominator) : array
{
while($numerator >= $denominator) {
$numerator -= $denominator;
++$i;
}
if(0 === $numerator) {
$numerator = $denominator = null;
}
return [
INTEGER => $i,
NUMERATOR => $numerator,
DENOMINATOR => $denominator
];
}
function calculate_measuremenet_arr(array $m): array
{
if (!isset($m[NUMERATOR]) || !isset($m[DENOMINATOR])) {
return $m;
}
return calculate_measurement(
$m[INTEGER] ?? 0,
intval($m[NUMERATOR]),
intval($m[DENOMINATOR])
);
}