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! :)
Grazie! Non sono troppo sicuro del perché ho pensato di averlo lì adesso ... grazie ancora lo capisco ora :) –
@CalvinTaylor sono contento che questo abbia aiutato – Ghost
@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. –