Função para trabalhar com números Romanos. A primeira é para converter numero INTEIRO para ROMANO e a segundo o contrário, número ROMANO para INTEIRO.

/**
* Converter número inteiro para romano
*/
function numberIntegerToRoman($num, $debug = false){ 
    
    $n = intval($num); 
    $nRoman = ''; 

    $default = array(
	    '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,
	);

    foreach ($default as $roman => $number){ 
        $matches = intval($n / $number); 
        $nRoman .= str_repeat($roman, $matches); 
        $n = $n % $number; 
    } 

    if($debug){
		return sprintf('%s = %s', $num, $nRoman);
	}

    return $nRoman; 
}

/**
* Converter número romano para inteiro
*/
function numberRomanToInteger($numRoman, $debug = false){

	$nRoman = $numRoman;
	$default = array(
	    '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,
	);

	$int = 0;
	foreach ($default as $key => $value) {
	    while (strpos($numRoman, $key) === 0) {
	        $int += $value;
	        $numRoman = substr($numRoman, strlen($key));
	    }
	}

	if($debug){
		return sprintf('%s = %s', $nRoman, $int);
	}

	return $int;
}

Utilização:
echo numberIntegerToRoman(2016, true);
/* Saída: 2016 = MMXVI */

echo numberRomanToInteger('MMXVI', true);
/* Saída: MMXVI = 2016 */

echo numberIntegerToRoman(2016);
/* Saída: MMXVI */

echo numberRomanToInteger('MMXVI');
/* Saída: 2016 */