[关闭]
@fzbing 2015-06-09T02:11:28.000000Z 字数 1543 阅读 1052

大写数字转阿拉伯

php


  1. <?php
  2. header("Content-type:text/html;charset=utf-8");
  3. /**
  4. * 把汉字转化为数组. ex: '一二三' -> ['一','二','三']
  5. * @param $str
  6. * @return array
  7. */
  8. function str2array($str)
  9. {
  10. $encode = mb_detect_encoding($str);
  11. $len = mb_strlen($str, $encode);
  12. $arr = array();
  13. for ($i = 0; $i < $len; $i++) {
  14. $arr[] = mb_substr($str, $i, 1, $encode);
  15. }
  16. return $arr;
  17. }
  18. /**
  19. * 把 大写数字 转化为 阿拉伯字符串 '壹百' -> '100'
  20. * @param $arr 标准的大写数字
  21. * @param int $str_num_len 结果的最大可能长度
  22. * @return string
  23. */
  24. function toNum($arr, $str_num_len = 13)
  25. {
  26. $map = array(
  27. '零' => 0,
  28. '壹' => 1,
  29. '贰' => 2,
  30. '叁' => 3,
  31. '肆' => 4,
  32. '伍' => 5,
  33. '陆' => 6,
  34. '柒' => 7,
  35. '捌' => 8,
  36. '玖' => 9
  37. );
  38. $map2 = array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
  39. $local = array(
  40. '拾' => 2,
  41. '佰' => 3,
  42. '仟' => 4
  43. );
  44. $local2 = array('拾', '佰', '仟');
  45. $len = count($arr);
  46. // $arr 待处理的数组
  47. // $len 数组长度
  48. $str_num = '';
  49. // 保存结果
  50. // $str_num_len 结果的最大可能长度
  51. $str_num = str_pad($str_num, $str_num_len, '0');
  52. $j = $str_num_len - 1; // 当前指向 $str_num 的位置
  53. $k = $str_num_len; // 指向 '个'
  54. // 当前大位置,(个,万,亿). 从右往左遍历,$k(依次)指向 (个,万,亿) 目前最大的位置
  55. for ($i = $len - 1; $i >= 0; $i--) {
  56. if (in_array($arr[$i], $local2)) {// '拾', '佰', '仟'
  57. $j = $k - $local[$arr[$i]];
  58. } elseif (in_array($arr[$i], $map2)) {// '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'
  59. $str_num[$j] = $map[$arr[$i]];
  60. $j--;
  61. } elseif ($arr[$i] === '万') { // '万'
  62. $k = $str_num_len - 4;
  63. $j = $k - 1;
  64. } elseif ($arr[$i] === '亿') { // '亿'
  65. $k = $str_num_len - 8;
  66. $j = $k - 1;
  67. }
  68. }
  69. for ($a = 0; $a < $str_num_len; $a++) {
  70. if ($str_num[$a] !== '0') {
  71. $str_num = substr($str_num, $a);
  72. break;
  73. }
  74. }
  75. return $str_num;
  76. }
  77. //$str_number = "贰仟零伍亿叁佰捌拾万零叁拾";
  78. //$str_number = "壹佰叁拾壹亿壹仟叁佰壹拾万零陆佰伍拾叁元整";
  79. //$str_number = "壹拾亿零贰仟叁佰捌拾壹万叁仟陆佰肆拾伍元整";
  80. //$str_number = "贰佰零壹亿肆仟贰佰零壹万肆仟贰佰零壹元整";
  81. //$str_number = "壹";
  82. //$str_number = "壹亿";
  83. $str_number = "壹亿壹仟万零壹拾";
  84. $arr_number = str2array($str_number);
  85. $a = toNum($arr_number);
  86. var_dump($a);
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注