写了一个,只能是算出两位数以下的, 帮我看看能不能优化一下
function cn2num1($cn){
switch($cn){
case "一":
return 1;
break;
case "二":
return 2;
break;
case "三":
return 3;
break;
case "四":
return 4;
break;
case "五":
return 5;
break;
case "六":
return 6;
break;
case "七":
return 7;
break;
case "八":
return 8;
break;
case "九":
return 9;
break;
case "十":
return 10;
break;
}
}
function cn2num2($num){
$mynum=split("十",$num);
return cn2num1($mynum[0]).(cn2num1($mynum[1])?cn2num1($mynum[1]):0);
}
function cn2num($num){
if (strlen($num)==2) return cn2num1($num);
if (strlen($num)>2) return cn2num2($num);
}
?>
function cn2num1($cn){
switch($cn){
case "一":
return 1;
break;
case "二":
return 2;
break;
case "三":
return 3;
break;
case "四":
return 4;
break;
case "五":
return 5;
break;
case "六":
return 6;
break;
case "七":
return 7;
break;
case "八":
return 8;
break;
case "九":
return 9;
break;
case "十":
return 10;
break;
}
}
function cn2num2($num){
$mynum=split("十",$num);
return cn2num1($mynum[0]).(cn2num1($mynum[1])?cn2num1($mynum[1]):0);
}
function cn2num($num){
if (strlen($num)==2) return cn2num1($num);
if (strlen($num)>2) return cn2num2($num);
}
?>
没有仔细调试的:
function qian($str)//千以下
{
$arrDig=array('零','一','二','三','四','五','六','七','八','九');
$arrP=array('亿','万','千','百','十');
if(strlen($str)==2) return array_search($str,$arrDig);
//千
if($qianPos=strpos($str,'千')){
$r=array_search(substr($str,$qianPos-2,2),$arrDig)*1000;
}
//百
if($baiPos=strpos($str,'百')){
$r+=array_search(substr($str,$baiPos-2,2),$arrDig)*100;
}
//十
if(($shiPos=strpos($str,''))!==false){
if($shiPos>1)
$r+=array_search(substr($str,$shiPos-2,2),$arrDig)*10;
else
$r+=10;
}
if(!in_array($gePos=substr($str,-2),$arrP))
$r+=array_search($gePos,$arrDig);
return $r;
}
function cnToNum($str)//千亿以下
{
//亿
if($yiPos=strpos($str,'亿')){
$r=qian(substr($str,0,$yiPos))*100000000;
}
//万
if($wanPos=strpos($str,'万')){
if($yiPos) $start1=$yiPos+2;
else $start1=0;
$r+=qian(substr($str,$start1,$wanPos-$start1))*10000;
} //万以下
if($r){
$r+=qian(substr($str,max($wanPos,$yiPos)+2));
}else{
$r=qian($str);
}
return $r;
}
$str="二百亿零四千五百二十万六千五百二十一";
echo $str.'=>'.cnToNum($str);
if(($shiPos=strpos($str,''))!==false){这里掉了一个'十'://十
if(($shiPos=strpos($str,'十'))!==false){