These are functions to convert roman numbers (e.g. MXC) into dec and vice versa.
Note: romdec() does not check whether a string is really roman or not. To force a user-input into a real roman number use decrom(romdec($input)). This will turn XXXX into XL for example.
<?php
function decrom($dec){
$digits=array(
1 => "I",
4 => "IV",
5 => "V",
9 => "IX",
10 => "X",
40 => "XL",
50 => "L",
90 => "XC",
100 => "C",
400 => "CD",
500 => "D",
900 => "CM",
1000 => "M"
);
krsort($digits);
$retval="";
foreach($digits as $key => $value){
while($dec>=$key){
$dec-=$key;
$retval.=$value;
}
}
return $retval;
}
function romdec($rom){
$digits=array(
"I" => 1,
"V" => 5,
"X" => 10,
"L" => 50,
"C" => 100,
"D" => 500,
"M" => 1000
);
$retval="";
$chars=array();
for($i=1;$i<=strlen($rom);$i++){
$chars[]=substr($rom,$i-1,1);
}
$step=1;
for($i=count($chars)-1;$i>=0;$i--){
if(!isset($digits[$chars[$i]])){ return "Error!"; }
if($step<=$digits[$chars[$i]]){
$step=$digits[$chars[$i]];
$retval+=$digits[$chars[$i]];
}
else{
$retval-=$digits[$chars[$i]];
}
}
return $retval;
}
echo decrom(romdec("XXXX"));
?>