como convertir numeros romanos a arabigos?

Nuevamente recurro a los expertos en php por si pueden echarme una manita. Por que la teoría no me entra tan bien como la practica.
Ahora he de convertir nº romanos a arabigos ó decimales. Para ello renombro cada caracter romano con 'str_replace' con su valor decimal. Hasta aqui Bien. El problema es que no se como sumar cada caracter romano renombrado para que me de el resultado correcto.
Os dejo el code:
<?php

if (!isset ($_POST ["romano"]) && empty ($_POST ["romano"]) or isset ($_POST ["romano"])) {
echo "<br/><p>Introduce un nº romano<br/></p>";
}
if (isset ($_POST ["romano"]) && !empty ($_POST ["romano"])){
$romano = $_POST["romano"];
$romano=str_replace("I","1",$romano);
$romano=str_replace("V","5",$romano);
$romano=str_replace("X","10",$romano);
$romano=str_replace("L","50",$romano);
$romano=str_replace("C","100",$romano);
$romano=str_replace("D","500",$romano);
$romano=str_replace("M","1000",$romano);
$max=(strlen("$romano"));
for($i=0;$i<$max;$i++);
$parcial=substr($romano,$i,1);
echo $romano;
}



?>
<form action="tema04_Ej3.php" method="post">
<input type="text" name="romano" size="40" value="<? if (isset ($_POST ['romano'])){echo $_POST['romano'];}?>" />
<input type="submit" name="submit" value="enviar" />
</form>
Lo mejor de caerse al tropezar, es volverse a levantar.
El caso es que lo he repasao, que se yo cuantas veces, pero no me entero.
¿Podias ponerle comentario a las lineas del code de Hidek1; osea este:
1.
<?php
2.
function romanNumber($number){
3.
$a=array('I','V','X','L','C','D','M');
4.
for($x='',$v=0;(int)$number;$number/=10){
5.
$n=++$v*2-1;
6.
$r=$number%10;
7.
$x=$r==4||$r==9?$a[$n-1].$a[$r<5?$n:$n+1].$x:
8.
($r>4?$a[$n]:'').str_repeat($a[$n-1],$r<4?$r:$r-5).$x;
9.
}
10.
return$x;
11.
}
12.

13.
function romanNumber($number){
14.
static$a=array('I','V','X','L','C','D','M');
15.
for($x='',$v=0;(int)$number;$number/=10){
16.
$n=++$v*2-1;
17.
$r=$number%10;
18.
$x=$r==4||$r==9?$a[$n-1].$a[$r<5?$n:$n+1].$x:
19.
($r>4?$a[$n]:'').str_repeat($a[$n-1],$r<4?$r:$r-5).$x;
20.
}
21.
return$x;
22.
}
23.
?>
Lo mejor de caerse al tropezar, es volverse a levantar.
La verdad es que parece que es el mejor, o el que mas currado esta; pero la verdad, no tengo ni idea de como lo hace, ya que hay funciones y cosas que no habia oido en la vida; y al fin y al cabo lo que se pretende en esos casos de concursos es dar el lenguaje mas alto de PHP; yo te aconsejo que lo uses sin saber lo que hace, o que uses el de: "silvanha" que se entiende bastante bien.

Un saludo.
Hombre victor, yo trato de aprehender, sino me voy a llevar toda la vida copiando y pegando sin entender nada.
De modo que si alguien me lo pudiera comentar, se lo agradecería.
Lo mejor de caerse al tropezar, es volverse a levantar.
No te preocupes, entiendo que lo quieres entender, y lo necesites comentado; pero como te digo, el de Hidek1, usa un codigo PHP desde mi punto de vista bastante avanzado, y yo no lo se, x ello no puedo comentartelo xk no lo entiendo!jejeje

Saludos
Estoy como loco ¿Podriais echarle un vistazo a este code aver en que estoy equivocado?
<?php
if (!isset ($_POST ["romano"]) && empty ($_POST ["romano"]) or isset ($_POST ["romano"])) {
echo "<br/><p>Introduce un nº romano<br/></p>";
}
if (isset ($_POST ["romano"]) && !empty ($_POST ["romano"])){
$romano = $_POST["romano"];

$caracteres=array("I"=>1,"V"=>5,"X"=>10,"L"=>50,"C"=>100,"D"=>500,"M"=>1000);
$caracterAnte=1001;
$mideRomano=strlen($romano);
for($i=0; $i<$mideRomano; $i++) {
$caracter=substr($romano,$i,1);
$caracter=$caracteres($caracterNue);
$numero=$numero+$caracter;
if ($caracterAnte<$caracter) {
echo "Este es su valor decimal " .$numero=($numero+$caracter)-(2*$caracterAnte);
}

else {
echo $caracterAnte=$caracter;
}
}
}
?>

Gracias
Lo mejor de caerse al tropezar, es volverse a levantar.
$caracteres=array("I"=>1,"V"=>5,"X"=>10,"L"=>50,"C "=>100,"D"=>500,"M"=>1000);

En eso da un error, aunque no se porque ya que esta todo bien
Error: "Fatal error: Function name must be a string in .....
echo "<br/><p>Introduce un nº romano<br/></p>";

Esto debes sustituirlo por esto para poder introducir el valor:

?>
<FORM METHOD="post" ACTION="romanos.php">
<p>Introduce un nº romano<input type="text" name="romano" size="30"></p>
<p><input type="submit" value="Enviar datos" name="enviar">
</FORM>
<?php

Y luego caracterAnte y caracterNue no se para que los usas.
?>
<FORM METHOD="post" ACTION="romanos.php">
<p>Introduce un nº romano<input type="text" name="romano" size="30"></p>
<p><input type="submit" value="Enviar datos" name="enviar">
</FORM>
<?php

Y luego caracterAnte y caracterNue no se para que los usas.

El form está, disculpa por no ponerlo.
Este es el error que me da a mi Fatal error: Function name must be a string in C:\wamp\www\PHP\tema04_Ej3.php on line 52
La linea 52 es: $caracter=$caracteres($caracterNue); Aqui está el fallo y no lo veo.
El $caracterAnte, lo pongo como nº maximo.
Y el $caracterNue, se supone que debe ser el caracter siguinte de $i. Ya dudo de todo.
Lo mejor de caerse al tropezar, es volverse a levantar.
La cosa es que esto:

$caracter=$caracteres($caracterNue);

Se pondria asi:

$caracter=$caracteres[$caracterNue];

y una pregunta, si caracterNue es el caracter actual, ¿Porque no usas i?

$caracter=$caracteres[$i];

Espero que al final funcione!jejeje
Bueno por fin lo he solucionao.
De modo que lo voy a postear por si le sirve a alguien
<?php
if (!isset ($_POST ["romano"]) && empty ($_POST ["romano"])) {
echo "<br/><p>Introduce un nº romano<br/></p>";
}
else {
$romano = $_POST["romano"];
$caracteres=array("I"=>1,"V"=>5,"X"=>10,"L"=>50,"C"=>100,"D"=>500,"M"=>1000);
$caracterAnte=1001;
$mideRomano=strlen($romano);
for($i=0; $i<$mideRomano; $i++) {
$caracter=substr($romano,$i,1);
$caracter=$caracteres[$caracter];
$numero=$numero+$caracter;
if ($caracterAnte<$caracter) {
$numero=$numero-2*$caracterAnte;
}
$caracterAnte=$caracter;
}
echo "El numero es: ".$numero;
}

?>

<form action="tema04_Ej3.php" method="post">
<input type="text" name="romano" size="40" value="<? if (isset ($_POST ['romano'])){echo $_POST['romano'];}?>" />
<input type="submit" name="submit" value="enviar" />
</form>
Lo mejor de caerse al tropezar, es volverse a levantar.