此文章发布于34个月前,部分信息可能已经过时,请自行斟酌确认
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
最后修改:2020 年 12 月 10 日 10 : 44 PM
© 允许规范转载