我想使用 PHP 将包含罗马数字的字符串转换为其整数表示形式。我需要这个,因为我需要对它们进行计算。
只识别基本的罗马数字字符就足够了,比如:
$roman_values=array(
'I' => 1,
'V' => 5,
'X' => 10,
'L' => 50,
'C' => 100,
'D' => 500,
'M' => 1000,
);
这意味着可能的最高数字是 3999 (MMMCMXCIX)。我将使用 N
来表示零,除此之外只支持正整数。
我不能将 PEAR 库用于罗马数字。
我在 SO 上发现了这个关于如何测试字符串是否包含有效罗马数字的好问题:
How do you match only valid roman numerals with a regular expression?
最好的编码方式是什么?
最佳答案
这个怎么样:
$romans = array(
'M' => 1000,
'CM' => 900,
'D' => 500,
'CD' => 400,
'C' => 100,
'XC' => 90,
'L' => 50,
'XL' => 40,
'X' => 10,
'IX' => 9,
'V' => 5,
'IV' => 4,
'I' => 1,
);
$roman = 'MMMCMXCIX';
$result = 0;
foreach ($romans as $key => $value) {
while (strpos($roman, $key) === 0) {
$result += $value;
$roman = substr($roman, strlen($key));
}
}
echo $result;
应该为提供的 $roman
输出 3999。它似乎适用于我的有限测试:
MCMXC = 1990
MM = 2000
MMXI = 2011
MCMLXXV = 1975
您可能还想先进行一些验证 :-)
关于php - 如何在 PHP 中将罗马数字转换为整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6265596/