<?php
	// Van getal naar romeins cijfer.
	function int2roman ($num, $array = array(1000 => 'M', 900 => 'CM', 500 => 'D', 400 => 'CD', 100 => 'C', 90 => 'XC', 50 => 'L', 40 => 'XL', 10 => 'X', 9 => 'IX', 5 => 'V', 4 => 'IV', 1 => 'I')) {
		$char = '';
		if (is_int($num) && $num > 0) {  // Als $num geen getal is, dan werkt het script niet en returnt hij $char, die leeg is.
			foreach ($array as $key => $char) {
				if ($num >= $key) {
					break;  // num is groter/gelijk aan de waarde van deze letter ($char). Breek uit!
				}
				unset($array[$key]);  // De array word kleiner, omdat deze recursief doorgegeven word -> De foreach hoeft dus minder rijen af -> sneller.
			}
			$char .= int2roman(($num-$key), $array);  // $char is al gedefinieerd, bij de uitgebroken foreach. Omdat romeinse cijfers vaak combinaties van letters zijn, moeten we recursief alles opnieuw doen.
		}
		return $char;
	}
	
	// Van romeins cijfer naar getal. (bovenstaande commentaar geld ook voor deze functie, alleen dan omgedraaid)
	function roman2int ($rom, $array = array(1000 => 'M', 900 => 'CM', 500 => 'D', 400 => 'CD', 100 => 'C', 90 => 'XC', 50 => 'L', 40 => 'XL', 10 => 'X', 9 => 'IX', 5 => 'V', 4 => 'IV', 1 => 'I')) {
		$num = '';
		if (preg_match('#^(M|D|C|L|X|V|I)+$#', $rom) && strlen($rom) > 0) {
			foreach ($array as $num => $char) {
				if (preg_match('#^'.$char.'#', $rom)) {
					$rom = preg_replace('#^'.$char.'#', '', $rom, 1);
					break;
				}
				unset($array[$num]);
			}
			$num += roman2int($rom, $array);
		}
		return $num;
	}
?>