2015-05-13 20 views
7

Grundsätzlich versuche ich eine Funktion zu erstellen, die eine römische Zahl in eine ganze Zahl verwandelt.Römische Zahl zu Integer-Funktion

Ich habe ein 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 
]; 

Ich bin ziemlich neu in PHP so bin ich immer noch auf dem Weg zu gewöhnen denken so beachten Sie bitte, lernen, ich bin immer noch :)

hier ist meine Funktion - oder das, was ich bisher:

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

ich habe stundenlang auf diesen gewesen und würde ebenso wie die das Licht der Welt es sehen würde jede Beratung sehr geschätzt.

, wenn ich es in der Kommandozeile mit

echo romanToInteger('I'); 

bekomme ich nur zurück 0 und ich denke, es ist etwas mit meinem intval zu tun?

Sorry wieder für ein Noob, Hilfe geschätzt, obwohl oder irgendwelche Hinweise! :)

Antwort

4

Ja hat es etwas mit der intval zu tun.

Sie werfen Ihre römische Eingabe in eine Ganzzahl, die es in 0 rendern.

entfernen, dass:

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

Dank! Nicht sicher, warum ich daran dachte, es jetzt dort zu haben ... Danke nochmal, ich verstehe es jetzt :) –

+0

@CalvinTaylor sicher froh, dass das geholfen hat – Ghost

+0

@Ghost 'romanToInteger ('IV');' das gibt 10 in Ihrem aktualisierten Codepad einfügen . Das sollte 4 sein. Bei römischen Methoden wird das "I" von "V" subtrahiert, wenn der erste Wert niedriger als der nächste ist. Im Gegensatz zu 'VI' wäre 6. –