php实现中文转数字,PHP实现中文转数字

PHP实现中文转数字

将汉字中包含的数字转为数字格式

也可以提取文字中包含的数字。

简单易用,功能强大,直接复制代码即可使用!

特别注意:不支持小数点数字

不支持大于PHP_INT_MAX的数

文字形式数字与阿拉伯数字混合情况可能会出现特殊值。

注意代码中的方法调用方式。function convert_number($str)

{

$map = [

'一' => '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 = $this->checkString($str, '/([\d亿万千百十]+)/u');//调用checkString方法方式请根据自身情况调整

$func_c2i = function ($str, $plus = false) use (&$func_c2i) {

if (false === $plus) {

$plus = array('亿' => 100000000, '万' => 10000, '千' => 1000, '百' => 100, '十' => 10,);

}

$i = 0;

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);

}

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;

}

调用示例:echo $this->convert_number('九百六十万'); //普通中文数字,9600000

echo $this->convert_number('壹亿柒仟万零捌佰肆拾'); //大写中文数字,170000840

echo $this->convert_number('学好PHP拿百万年薪'); //句子中的数字, 1000000

echo $this->convert_number('今年春运发送人次达26亿'); //数字和汉字混合出现,2600000000

echo $this->convert_number('两只小蜜蜂'); //口语化数字,2

echo $this->convert_number('万万没想到'); //复古的表达方式,100000000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值