php實現中文轉數字,實現方式很智能很php

分享一個輔助函數,使用php儘量識別出字符串中的數字,實現效果以下。php

1
2
3
4
5
6
7
8
9
echo  checkNatInt( '九百六十萬' );  //普通中文數字,9600000
echo  checkNatInt( '壹億柒仟萬零捌佰肆拾' );  //大寫中文數字,170000840
 
 
echo  checkNatInt( '學好PHP拿百萬年薪' );  //句子中的數字, 1000000
echo  checkNatInt( '今年春運發送人次達26億' );  //數字和漢字混合出現,2600000000
 
echo  checkNatInt( '兩隻小蜜蜂' );  //口語化數字,2
echo  checkNatInt( '萬萬沒想到' );  //復古的表達方式,100000000

 

注意事項微信

  1. 不支持小數微信開發

  2. 不支持大於PHP_INT_MAX的數框架

 

部分實現代碼函數

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
function  checkNatInt( $str ) {
     $map  array (
         '一'  =>  '1' , '二'  =>  '2' , '三'  =>  '3' , '四'  =>  '4' , '五'  =>  '5' , '六'  =>  '6' , '七'  =>  '7' , '八'  =>  '8' , '九'  =>  '9' ,
         '壹'  =>  '1' , '貳'  =>  '2' , '叄'  =>  '3' , '肆'  =>  '4' , '伍'  =>  '5' , '陸'  =>  '6' , '柒'  =>  '7' , '捌'  =>  '8' , '玖'  =>  '9' ,
         '零'  =>  '0' , '兩'  =>  '2' ,
         '仟'  =>  '千' , '佰'  =>  '百' , '拾'  =>  '十' ,
         '萬萬'  =>  '億' ,
     );  
 
     $str  str_replace ( array_keys ( $map ),  array_values ( $map ),  $str );
     $str  = checkString( $str '/([\d億萬千百十]+)/u' );
 
     $func_c2i  function  ( $str $plus  = false)  use (& $func_c2i ) {
         if (false ===  $plus ) {
             $plus  array ( '億'  => 100000000, '萬'  => 10000, '千'  => 1000, '百'  => 100, '十'  => 10,);
         }   
 
         $i  = 0;
         if ( $plus )
         foreach ( $plus  as  $k  =>  $v ) {
             $i ++;
             if ( strpos ( $str $k ) !== false) {
                 $ex  explode ( $k $str , 2); 
                 $new_plus  array_slice ( $plus $i , null, true);
                 $l  $func_c2i ( $ex [0],  $new_plus );
                 $r  $func_c2i ( $ex [1],  $new_plus );
                 if ( $l  == 0)  $l  = 1;
                 return  $l  $v  $r ;
             }
         }
 
         return  (int) $str ;
     }
     return  $func_c2i ( $str );
   }
 
   //來自uct php微信開發框架,其中的checkString函數以下
   function  checkString( $var $check  '' $default  '' ) {
     if  (! is_string ( $var )) {
         if ( is_numeric ( $var )) {
             $var  = (string) $var ;
         }
         else  {
             return  $default ;
         }
     }
     if  ( $check ) {
          return  (preg_match( $check $var $ret ) ?  $ret [1] :  $default );
     }
 
     return  $var ;
}
相關文章
相關標籤/搜索