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

php中文网
发布: 2016-06-23 13:16:26
原创
866人浏览过

分享一个辅助函数,使用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的数

    腾讯智影-AI数字人
    腾讯智影-AI数字人

    基于AI数字人能力,实现7*24小时AI数字人直播带货,低成本实现直播业务快速增增,全天智能在线直播

    腾讯智影-AI数字人 73
    查看详情 腾讯智影-AI数字人

    立即学习PHP免费学习笔记(深入)”;

 

部分实现代码

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 ;

}

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号