`
header("Content-type:text/html;charset=utf-8");
function replace($str){
$str += 0; //去除前面的0;
$trans = function($num){
$hj = str_replace(array(0,1,2,3,4,5,6,7,8,9,'.'), array('零','壹','贰','叁','肆','伍','陆','柒','捌','玖','点'), $num);
return $hj;
};
$length = strlen($str);
$arr = str_split($str) ;
for ($i=$length-1; $i >= 0; $i--) {
$g[] = $arr[$i];
}
krsort($g);
$arr = $g;
// 个十百千万十万百万千万亿
// 0 1 2 3 4 5 6 7 8
$get = '';
for ($i=$length-1; $i >= 0; $i--) {
$f = intval(floor(($i)/4));
$g = ($i)%4;
$num = $trans($arr[$i]);
$juge = 9;
//判断是上一个 和 目前数值是否同时为零,加上判断目前数值是否是标准单位
if(isset($arr[$i+1]) && $arr[$i+1] == 0 && $arr[$i] == 0 && $g != 0){
if(isset($arr[$i+1]) && ($i+1)%4 == 0){ //判断上一个数值是否为标准单位,是的话,继续往下执行,不跳出(处理上一个和目前数值都为零时)
}else{
continue;
}
}
// 判断是上一个 和 目前数值是否同时为零,加上判断上一个数值是否是标准单位,不是标准单位,因为零已经在上一个加入,所以$get就不再添加描述,
// 倘若是标准单位,而且上一个 和 目前数值不同时为零,则添加描述
if(isset($arr[$i+1]) && $arr[$i+1] == 0 && $arr[$i] == 0 && ($i+1)%4 != 0){
$juge = 0;
}else{
$get .= $num;
if($arr[$i] == 0){
$juge = 0;
}else{
$juge = 9;
}
}
if($g == 0 && $juge == 0){// 当目前数值为标准单位,而且上一个描述为“零”时,则删除掉前面的“零”
$get = mb_substr($get, 0,-1,'utf-8');
}
if($arr[$i] == 0 && $g != 0){//如果目前数值为0,而且不为标准单位,则跳出,不做描述
continue;
}
if($g == 0){
switch ($f) {//标准单位
case '0': $get .= ''; break;
case '1': $get .= '万'; break;
case '2': $get .= '亿'; break;
case '3': $get .= '兆'; break;
case '4': $get .= '京'; break;
case '5': $get .= '垓'; break;
default:break;
}
}else{
switch ($g) {//标量单位
case '1': $get .= '拾'; break;
case '2': $get .= '百'; break;
case '3': $get .= '千'; break;
default:break;
}
}
}
return $get;
}
$str='15006004007';
echo "
";
$hg = replace($str);
echo $hg;
`