@fzbing
2015-06-09T02:11:28.000000Z
字数 1543
阅读 2045
php
<?phpheader("Content-type:text/html;charset=utf-8");/*** 把汉字转化为数组. ex: '一二三' -> ['一','二','三']* @param $str* @return array*/function str2array($str){$encode = mb_detect_encoding($str);$len = mb_strlen($str, $encode);$arr = array();for ($i = 0; $i < $len; $i++) {$arr[] = mb_substr($str, $i, 1, $encode);}return $arr;}/*** 把 大写数字 转化为 阿拉伯字符串 '壹百' -> '100'* @param $arr 标准的大写数字* @param int $str_num_len 结果的最大可能长度* @return string*/function toNum($arr, $str_num_len = 13){$map = array('零' => 0,'壹' => 1,'贰' => 2,'叁' => 3,'肆' => 4,'伍' => 5,'陆' => 6,'柒' => 7,'捌' => 8,'玖' => 9);$map2 = array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');$local = array('拾' => 2,'佰' => 3,'仟' => 4);$local2 = array('拾', '佰', '仟');$len = count($arr);// $arr 待处理的数组// $len 数组长度$str_num = '';// 保存结果// $str_num_len 结果的最大可能长度$str_num = str_pad($str_num, $str_num_len, '0');$j = $str_num_len - 1; // 当前指向 $str_num 的位置$k = $str_num_len; // 指向 '个'// 当前大位置,(个,万,亿). 从右往左遍历,$k(依次)指向 (个,万,亿) 目前最大的位置for ($i = $len - 1; $i >= 0; $i--) {if (in_array($arr[$i], $local2)) {// '拾', '佰', '仟'$j = $k - $local[$arr[$i]];} elseif (in_array($arr[$i], $map2)) {// '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'$str_num[$j] = $map[$arr[$i]];$j--;} elseif ($arr[$i] === '万') { // '万'$k = $str_num_len - 4;$j = $k - 1;} elseif ($arr[$i] === '亿') { // '亿'$k = $str_num_len - 8;$j = $k - 1;}}for ($a = 0; $a < $str_num_len; $a++) {if ($str_num[$a] !== '0') {$str_num = substr($str_num, $a);break;}}return $str_num;}//$str_number = "贰仟零伍亿叁佰捌拾万零叁拾";//$str_number = "壹佰叁拾壹亿壹仟叁佰壹拾万零陆佰伍拾叁元整";//$str_number = "壹拾亿零贰仟叁佰捌拾壹万叁仟陆佰肆拾伍元整";//$str_number = "贰佰零壹亿肆仟贰佰零壹万肆仟贰佰零壹元整";//$str_number = "壹";//$str_number = "壹亿";$str_number = "壹亿壹仟万零壹拾";$arr_number = str2array($str_number);$a = toNum($arr_number);var_dump($a);