Roman Numeral为整数函数

Cal*_*lor 7 php foreach integer function roman-numerals

基本上我正在尝试创建一个将罗马数字转换为整数的函数.

我有一个数组:

$roman_numerals=[
    '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
];
Run Code Online (Sandbox Code Playgroud)

我对PHP很新,所以我仍然习惯于思考的方式,所以请记住我还在学习:)

这是我的功能 - 或者我到目前为止:

//Array
function romanToInteger($key)
{
$roman_numerals=[
    '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 = intval($key);
$result = 0;

foreach ($roman_numerals as $key => $value) {
    while (strpos($roman, $key) === 0) {
        $result += $value;
        $roman = substr($roman, strlen($key));
    }
}
var_dump($roman); //test
echo $result;
}
Run Code Online (Sandbox Code Playgroud)

我已经在这里工作了几个小时,只是希望看到它的亮点,任何建议将不胜感激.

当我在命令行中运行它时

echo romanToInteger('I');
Run Code Online (Sandbox Code Playgroud)

我刚回来0,我认为它与我的intval有关?

很抱歉再次成为一个菜鸟,帮助赞赏或任何指针!:)

Kev*_*vin 4

是的,这与intval.

您基本上将罗马输入转换为整数,将其渲染为0.

删除:

function romanToInteger($key)
{
    $romans = [
        '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 = $key;
    $result = 0;

    foreach ($romans as $key => $value) {
        while (strpos($roman, $key) === 0) {
            $result += $value;
            $roman = substr($roman, strlen($key));
        }
    }
    echo $result;
}

romanToInteger('IV');
Run Code Online (Sandbox Code Playgroud)

样本输出