fork download
  1. <?php
  2.  
  3. /**
  4.  * Convert a roman numeral to number
  5.  *
  6.  * @param $roman
  7.  * @return int
  8.  */
  9. function ma_roman2number($roman){
  10. if (empty($roman)) return;
  11.  
  12. $conv = array(
  13. array("letter" => 'I', "number" => 1),
  14. array("letter" => 'i', "number" => 1),
  15. array("letter" => 'V', "number" => 5),
  16. array("letter" => 'v', "number" => 5),
  17. array("letter" => 'X', "number" => 10),
  18. array("letter" => 'x', "number" => 10),
  19. array("letter" => 'L', "number" => 50),
  20. array("letter" => 'l', "number" => 50),
  21. array("letter" => 'C', "number" => 100),
  22. array("letter" => 'c', "number" => 100),
  23. array("letter" => 'D', "number" => 500),
  24. array("letter" => 'd', "number" => 500),
  25. array("letter" => 'M', "number" => 1000),
  26. array("letter" => 'm', "number" => 1000),
  27. array("letter" => 0, "number" => 0)
  28. );
  29. $arabic = 0;
  30. $state = 0;
  31. $sidx = 0;
  32. $len = strlen($roman);
  33.  
  34. while ($len >= 0) {
  35. $i = 0;
  36. $sidx = $len;
  37. while ($conv[$i]['number'] > 0) {
  38. if (strtoupper(@$roman[$sidx]) == $conv[$i]['letter']) {
  39. if ($state > $conv[$i]['number']) {
  40. $arabic -= $conv[$i]['number'];
  41. } else {
  42. $arabic += $conv[$i]['number'];
  43. $state = $conv[$i]['number'];
  44. }
  45. }
  46. $i++;
  47. }
  48. $len--;
  49. }
  50. return($arabic);
  51. }
  52.  
  53.  
  54.  
  55. /**
  56.  * Convert all roman numerals in a string to numbers (case insensitive)
  57.  *
  58.  * @param $str
  59.  */
  60. function ma_roman_to_number_string($str) {
  61. if (empty($str)) return;
  62.  
  63. return preg_replace_callback('~\b[IVXLCDMivxlcdm0]+\b~', function($m) {
  64. return ma_roman2number($m[0]);
  65. }, $str);
  66. }
  67.  
  68.  
  69.  
  70.  
  71. $str = "This is iv chapter of book Hero and a preview of pageX";
  72. echo ma_roman_to_number_string($str);
  73.  
  74.  
  75.  
Success #stdin #stdout 0.02s 23692KB
stdin
Standard input is empty
stdout
This is 4 chapter of book Hero and a preview of pageX