class RomanToInteger
{
private static $romanMap = [
'I' => 1,
'V' => 5,
'X' => 10,
'L' => 50,
'C' => 100,
'D' => 500,
'M' => 1000
];
public static function romanToInt(string $s): int
{
$total = 0;
$prevValue = 0;
// iterate backwards over the string
for ($i = strlen($s) - 1; $i >= 0; $i--) {
$currentValue = self::$romanMap[$s[$i]];
if ($currentValue < $prevValue) {
$total -= $currentValue;
} else {
$total += $currentValue;
}
$prevValue = $currentValue;
}
return $total;
}
}
// main
$roman = "XCVII";
$result = RomanToInteger::romanToInt($roman);
echo "The integer value of $roman is $result\n";
/*
XCVII =
XC+V+I+I =
90+5+1+1 =
97
*/
/*
run:
The integer value of XCVII is 97
*/