2015-05-13 10 views
7

in pratica sto cercando di creare una funzione che trasformi un numero romano in un numero intero.Numero romano alla funzione intera

Ho un array:

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

Sono abbastanza nuovo per PHP quindi sto ancora tempo per abituarsi al modo di pensare così si prega di tenere a mente sto ancora imparando :)

qui è la mia funzione - o ciò che ho finora:

//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; 
} 

sono stato a questo per ore e sarebbe proprio come il vedere la luce di esso, tutto il consiglio sarebbe molto apprezzato.

quando ho eseguito nella riga di comando con

echo romanToInteger('I'); 

ottengo solo restituito 0 e penso che sia qualcosa a che fare con il mio intval?

Scusa ancora per essere un noob, aiuto apprezzato però o qualche suggerimento! :)

risposta

4

Sì, ha qualcosa a che fare con lo intval.

Fondamentalmente stai convertendo il tuo input romano in un numero intero trasformandolo in 0.

Rimuovere che:

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

Grazie! Non sono troppo sicuro del perché ho pensato di averlo lì adesso ... grazie ancora lo capisco ora :) –

+0

@CalvinTaylor sono contento che questo abbia aiutato – Ghost

+0

@Ghost 'romanToInteger ('IV');' che produce 10 nella tua copia aggiornata di codepad . Dovrebbe essere 4. Nei metodi romani, il 'I' viene sottratto da' V' se il primo valore è inferiore al successivo. Al contrario di 'VI' sarebbe 6. –