当前位置:Gxlcms > PHP教程 > php实现中文转数字,实现方式很智能很php

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

时间:2021-07-01 10:21:17 帮助过:23人阅读

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

}

人气教程排行