>php教程 >php手册 >php实现中文转数字,实现方式很智能很php,

php实现中文转数字,实现方式很智能很php,

WBOY
WBOY원래의
2016-06-13 08:46:04938검색

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; }
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.