当前位置:首页 > PHP教程 > php应用 > 列表

php实现中文转数字

发布:smiling 来源: PHP粉丝网  添加日期:2021-07-10 14:26:45 浏览: 评论:0 

这里给大家分享的是一则使用php实现的中文转数字的代码,非常智能,也很完美,有需要的小伙伴可以参考下。

分享一个辅助函数,使用php尽可能识别出字符串中的数字,先上代码:

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

实现效果如下。

  1. echo checkNatInt('九百六十万'); //普通中文数字,9600000 
  2. echo checkNatInt('壹亿柒仟万零捌佰肆拾'); //大写中文数字,170000840 
  3.  
  4. echo checkNatInt('学好PHP拿百万年薪'); //句子中的数字, 1000000 
  5. echo checkNatInt('今年春运发送人次达26亿'); //数字和汉字混合出现,2600000000 
  6.    
  7. echo checkNatInt('两只小蜜蜂'); //口语化数字,2 
  8. echo checkNatInt('万万没想到'); //复古的表达方式,100000000 

注意事项

不支持小数

不支持大于PHP_INT_MAX的数

Tags: php中文转数字

分享到: