2015-05-13 54 views
7

基本上我試圖創建一個函數,將羅馬數字變成一個整數。羅馬數字整數函數

我有一個數組:

$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運行呢?

對不起,作爲一個noob,幫助讚賞或任何指針! :)

回答

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 。這應該是4.在羅馬方法中,如果第一個值低於下一個,則將'I'從「V」中減去。與「VI」相反,就是6. –