2015-05-13 3 views
7

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

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

$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 и я думаю, что его что-то делать с моим intval?

Извините за то, что вы новичок, помогите оценить хотя или любые указатели! :)

ответ

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'); 

Sample Output

+0

Спасибо! Не слишком уверен, почему я думал о том, чтобы иметь его там сейчас ... спасибо еще раз, я понимаю это сейчас :) –

+0

@CalvinTaylor уверен, что это помогло – Ghost

+0

@Ghost 'romanToInteger ('IV');' который выводит 10 в вашу обновленную палочку codepad , Это должно быть 4. В римских методах «I» вычитается из «V», если первое значение ниже следующего. В отличие от «VI» было бы 6. –

Смежные вопросы