Римская цифра в целую функцию

в основном я пытаюсь создать функцию, которая превратит римскую цифру в целое число.

У меня есть массив:

$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
];

Я довольно новичок в 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;
}

Я был в этом в течение нескольких часов и хотел бы увидеть свет, любой совет будет принята с благодарностью.

когда я запускаю его в командной строке с

echo romanToInteger('I');

мне только что вернули 0, и я думаю, что это как-то связано с моим интвалом?

Снова извините за то, что я новичок, хотя оцените помощь или любые указатели! 🙂

7

Решение

Да, это как-то связано с 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');

Пример вывода

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]