Mira aquí tengo la que presente, pero optimizada digamos....
Para que tuviera mas velocidad elimine la clase, elimine el logaritmo y entonces el for siempre empieza por el numero 3.
El resultado es que casi duplico la velocidad de 0.06 a 0.033
Código PHP:
<?php
$_romanos = array(0 => array(0 => '',
1 => 'I',
2 => 'II',
3 => 'III',
4 => 'IV',
5 => 'V',
6 => 'VI',
7 => 'VII',
8 => 'VIII',
9 => 'IX'),
1 => array(0 => '',
1 => 'X',
2 => 'XX',
3 => 'XXX',
4 => 'XL',
5 => 'L',
6 => 'LX',
7 => 'LXX',
8 => 'LXXX',
9 => 'XC'),
2 => array(0 => '',
1 => 'C',
2 => 'CC',
3 => 'CCC',
4 => 'CD',
5 => 'D',
6 => 'DC',
7 => 'DCC',
8 => 'DCCC',
9 => 'CM'),
3 => array(0 => '',
1 => 'M',
2 => 'MM',
3 => 'MMM'));
$_divisores = array(1, 10, 100, 1000);
function decimalRomano($numero)
{
global $_romanos;
global $_divisores;
$retorno = '';
for ($div = 3; $div > -1; $div--) {
$aux = (int)($numero/$_divisores[$div]);
$retorno.= $_romanos[$div][$aux];
$numero -=$_divisores[$div]*$aux;
}
return $retorno;
}
$arr = array();
$nTotal = 30;
for($n=0; $n<$nTotal; $n++){
$start = microtime(true);
for($i = 1; $i < 4000; $i++) {
decimalRomano($i);
}
$arr[] = microtime(true)-$start;
}
echo array_sum($arr) / $nTotal;
Ya fue con el código que provee la vez anterior la velocidad.....
Pero me gustan las clases jejej