PHP实现中文转数字

此文章发布于30个月前,部分信息可能已经过时,请自行斟酌确认

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

原文链接:https://www.jb51.net/article/79658.htm

最后修改:2020 年 12 月 10 日 10 : 44 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论