在我们开发项目过程中,有时会遇到这种情况:当我们在写支付账单的时候需要填写数字金额的大写,有的时候还真的写不出来,这个时候用百度也听尴尬的,特地写了这个方法,可以经常使用,进行直接转换。
代码实现如下:
<?php
/**
* =======================================
* Created by ZHIHUA·WEI.
* Author: ZHIHUA·WEI
* Date: 2018/1/29
* Time: 10:10
* Project: PHP开发小技巧
* Power: 实现将数字转换为大写金额计数
* =======================================
*/
/**
* 函数:将数字转换为大写金额
* @param $number int 输入的数字
* @return string
*/
header("Content-type:text/html;charset=utf-8");
function NumberTransformCny($number)
{
//定义数字大写、人名币单位、数字单位
static $NumbersUp = array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"),
$CnyUnits = array("圆", "角", "分"),
$NumUnits = array("拾", "佰", "仟", "万", "拾", "佰", "仟", "亿");
//将数字按小数点分开
//num1为整数部分,num2为小数部分
list($num1, $num2) = explode(".", $number, 2);
//将小数点后两位分开,此时num2为数组
$num2 = array_filter(array($num2[1], $num2[0]));
//将整数部分进行转换
$ret = array_merge($num2, array(implode("", _Cny_Map_Unit(str_split($num1), $NumUnits)), ""));
$ret = implode("", array_reverse(_Cny_Map_Unit($ret, $CnyUnits)));
return str_replace(array_keys($NumbersUp), $NumbersUp, $ret);
}
/**
* 函数:将整数转换成带单位字符串
* @param $list array 数字数组
* @param $units array 单位数组
* @return array
*/
function _Cny_Map_Unit($list, $units)
{
$u_num = count($units);
$ret = array();
foreach (array_reverse($list) as $item) {
$num = count($ret);
if ($item != "0" || !($num % 4))
$n = ($item == '0' ? '' : $item) . ($units[($num - 1) % $u_num]);
else
$n = is_numeric($ret[0][0]) ? $item : '';
array_unshift($ret, $n);
}
return $ret;
}
$number = 12345678.19;
var_dump(NumberTransformCny($number));
//打印结果:壹仟贰佰叁拾肆万伍仟陆佰柒拾捌圆壹角玖分