PHP简单实现:阿拉伯数字->汉字

No Comments

数字转汉字(只支持整数),这种需求遇到的时候不多,但,我还是遇到了
闲话不多说,直接上代码:

<?php
/*
数字转汉字
如:123 转为 一百二十三
*/
function num2str($num) {
	if(!is_numeric($num)) return false;

	$ret = '';
	if($num < 0) {
		$ret = '负';
		$num = -$num;
	}

	$zhNumArray = array(
		"1" => "一",
		"2" => "二",
		"3" => "三",
		"4" => "四",
		"5" => "五",
		"6" => "六",
		"7" => "七",
		"8" => "八",
		"9" => "九",
		"0" => "零",
	);

	$bitStrArray = array(
		"1" => "",
		"10" => "十",
		"100" => "百",
		"1000" => "千",
		"10000" => "万",
		"100000000" => "亿",
	);

	$prebit = 0;//上次记录的位数
	krsort($bitStrArray);
	foreach($bitStrArray as $bit => $name) {
		$bit = floatval($bit);
		if($num >= $bit) {
			$tmpNum = floor($num / $bit);
			if($tmpNum >= 10) {
				$tmpRet = num2str($tmpNum);
				$ret .= $tmpRet . $name;
			} else {
				if($prebit/$bit > 10) {//按照中文习惯补零
					$ret .= '0';
				}
				$ret .= $tmpNum . $name;
			}
			$prebit = $bit;
			$num = fmod($num, $bit);//取模
		}
	}

	$ret = str_replace(array_keys($zhNumArray), array_values($zhNumArray), $ret);
	return $ret;
}

$test = '1234567890';
echo num2str($test);
?>

这段代码算不上优美,可读性还凑合,bug肯定会有(那还展示出来干嘛呀- -!)。但我还是幻想万一对人能有所帮助呢,或者引来某个迷路的高手指点一二,都算是件好事。

Leave a Reply