<?php
/**
* Convert a roman numeral to number
*
* @param $roman
* @return int
*/
function ma_roman2number($roman){
if (empty($roman)) return;
array("letter" => 'I', "number" => 1), array("letter" => 'i', "number" => 1), array("letter" => 'V', "number" => 5), array("letter" => 'v', "number" => 5), array("letter" => 'X', "number" => 10), array("letter" => 'x', "number" => 10), array("letter" => 'L', "number" => 50), array("letter" => 'l', "number" => 50), array("letter" => 'C', "number" => 100), array("letter" => 'c', "number" => 100), array("letter" => 'D', "number" => 500), array("letter" => 'd', "number" => 500), array("letter" => 'M', "number" => 1000), array("letter" => 'm', "number" => 1000), array("letter" => 0, "number" => 0) );
$arabic = 0;
$state = 0;
$sidx = 0;
while ($len >= 0) {
$i = 0;
$sidx = $len;
while ($conv[$i]['number'] > 0) {
if (strtoupper(@$roman[$sidx]) == $conv[$i]['letter']) { if ($state > $conv[$i]['number']) {
$arabic -= $conv[$i]['number'];
} else {
$arabic += $conv[$i]['number'];
$state = $conv[$i]['number'];
}
}
$i++;
}
$len--;
}
return($arabic);
}
/**
* Convert all roman numerals in a string to numbers (case insensitive)
*
* @param $str
*/
function ma_roman_to_number_string($str) {
return ma_roman2number($m[0]);
}, $str);
}
$str = "This is iv chapter of book Hero and a preview of pageX";
echo ma_roman_to_number_string($str);
PD9waHAKCi8qKgogKiBDb252ZXJ0IGEgcm9tYW4gbnVtZXJhbCB0byBudW1iZXIKICoKICogQHBhcmFtICRyb21hbgogKiBAcmV0dXJuIGludAogKi8KZnVuY3Rpb24gbWFfcm9tYW4ybnVtYmVyKCRyb21hbil7CiAgICBpZiAoZW1wdHkoJHJvbWFuKSkgcmV0dXJuOwoKICAgICRjb252ID0gYXJyYXkoCiAgICAgICAgYXJyYXkoImxldHRlciIgPT4gJ0knLCAibnVtYmVyIiA9PiAxKSwKICAgICAgICBhcnJheSgibGV0dGVyIiA9PiAnaScsICJudW1iZXIiID0+IDEpLAogICAgICAgIGFycmF5KCJsZXR0ZXIiID0+ICdWJywgIm51bWJlciIgPT4gNSksCiAgICAgICAgYXJyYXkoImxldHRlciIgPT4gJ3YnLCAibnVtYmVyIiA9PiA1KSwKICAgICAgICBhcnJheSgibGV0dGVyIiA9PiAnWCcsICJudW1iZXIiID0+IDEwKSwKICAgICAgICBhcnJheSgibGV0dGVyIiA9PiAneCcsICJudW1iZXIiID0+IDEwKSwKICAgICAgICBhcnJheSgibGV0dGVyIiA9PiAnTCcsICJudW1iZXIiID0+IDUwKSwKICAgICAgICBhcnJheSgibGV0dGVyIiA9PiAnbCcsICJudW1iZXIiID0+IDUwKSwKICAgICAgICBhcnJheSgibGV0dGVyIiA9PiAnQycsICJudW1iZXIiID0+IDEwMCksCiAgICAgICAgYXJyYXkoImxldHRlciIgPT4gJ2MnLCAibnVtYmVyIiA9PiAxMDApLAogICAgICAgIGFycmF5KCJsZXR0ZXIiID0+ICdEJywgIm51bWJlciIgPT4gNTAwKSwKICAgICAgICBhcnJheSgibGV0dGVyIiA9PiAnZCcsICJudW1iZXIiID0+IDUwMCksCiAgICAgICAgYXJyYXkoImxldHRlciIgPT4gJ00nLCAibnVtYmVyIiA9PiAxMDAwKSwKICAgICAgICBhcnJheSgibGV0dGVyIiA9PiAnbScsICJudW1iZXIiID0+IDEwMDApLAogICAgICAgIGFycmF5KCJsZXR0ZXIiID0+IDAsICJudW1iZXIiID0+IDApCiAgICApOwogICAgJGFyYWJpYyA9IDA7CiAgICAkc3RhdGUgPSAwOwogICAgJHNpZHggPSAwOwogICAgJGxlbiA9IHN0cmxlbigkcm9tYW4pOwoKICAgIHdoaWxlICgkbGVuID49IDApIHsKICAgICAgICAkaSA9IDA7CiAgICAgICAgJHNpZHggPSAkbGVuOwogICAgICAgIHdoaWxlICgkY29udlskaV1bJ251bWJlciddID4gMCkgewogICAgICAgICAgICBpZiAoc3RydG91cHBlcihAJHJvbWFuWyRzaWR4XSkgPT0gJGNvbnZbJGldWydsZXR0ZXInXSkgewogICAgICAgICAgICAgICAgaWYgKCRzdGF0ZSA+ICRjb252WyRpXVsnbnVtYmVyJ10pIHsKICAgICAgICAgICAgICAgICAgICAkYXJhYmljIC09ICRjb252WyRpXVsnbnVtYmVyJ107CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRhcmFiaWMgKz0gJGNvbnZbJGldWydudW1iZXInXTsKICAgICAgICAgICAgICAgICAgICAkc3RhdGUgPSAkY29udlskaV1bJ251bWJlciddOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICRpKys7CiAgICAgICAgfQogICAgICAgICRsZW4tLTsKICAgIH0KICAgIHJldHVybigkYXJhYmljKTsKfQoKCgovKioKICogQ29udmVydCBhbGwgcm9tYW4gbnVtZXJhbHMgaW4gYSBzdHJpbmcgdG8gbnVtYmVycyAoY2FzZSBpbnNlbnNpdGl2ZSkKICoKICogQHBhcmFtICRzdHIKICovCmZ1bmN0aW9uIG1hX3JvbWFuX3RvX251bWJlcl9zdHJpbmcoJHN0cikgewogICAgaWYgKGVtcHR5KCRzdHIpKSByZXR1cm47CgogICAgcmV0dXJuIHByZWdfcmVwbGFjZV9jYWxsYmFjaygnflxiW0lWWExDRE1pdnhsY2RtMF0rXGJ+JywgZnVuY3Rpb24oJG0pIHsKICAgICAgICByZXR1cm4gbWFfcm9tYW4ybnVtYmVyKCRtWzBdKTsKICAgIH0sICRzdHIpOwp9CgoKCgokc3RyID0gIlRoaXMgaXMgaXYgY2hhcHRlciBvZiBib29rIEhlcm8gYW5kIGEgcHJldmlldyBvZiBwYWdlWCI7CmVjaG8gbWFfcm9tYW5fdG9fbnVtYmVyX3N0cmluZygkc3RyKTsKCgo=