美文网首页
PHP 中文数字转阿拉伯数字

PHP 中文数字转阿拉伯数字

作者: 不可思议的黄老师 | 来源:发表于2022-12-20 14:47 被阅读0次

    PHP 中文数字转阿拉伯数字

    如果我要将 一千五百四十七 转成 1547 改如何操作

    思路

    第一步,将数字换出来一千五百四十七 ===> 1千5百4十7

    第二步,将倍数乘回去1千5百4十7 ===> 1*1000 + 5*100 + 4*10 + 7 = 1547

    PHP代码

    function ch2num(string $ch) : int
    {
        //单位
        $unit = [
            '个' => 1,
            '個' => 1,
            '十' => 10,
            '拾' => 10,
            '百' => 100,
            '佰' => 100,
            '千' => 1000,
            '仟' => 1000,
            '万' => 10000,
            '萬' => 10000,
            '亿' => 100000000,
            '億' => 100000000,
        ];
    
        //词典
        $dictionary = [
            '零' => '',
            '一' => 1,
            '壹' => 1,
            '二' => 2,
            '貳' => 2,
            '三' => 3,
            '叁' => 3,
            '四' => 4,
            '肆' => 4,
            '五' => 5,
            '伍' => 5,
            '六' => 6,
            '陆' => 6,
            '陸' => 6,
            '七' => 7,
            '柒' => 7,
            '八' => 8,
            '捌' => 8,
            '九' => 9,
            '玖' => 9,
        ];
    
        $start = $result = 0;
        $ch = str_replace(array_keys($dictionary), array_values($dictionary), $ch);
        $len = mb_strlen($ch);
        while($i = mb_substr($ch, $start, 1)) {
            //优先判断数字和倍数是否完整,两个数值完整就累入
            if (is_numeric($i) && isset($number) && isset($multiple)) {
                $result += $number * $multiple;
    
                //清除倍数,等待下次完整的数字和倍数
                unset($multiple);
            }
    
            //循环到结尾了,计入最后一次
            if ($start == $len-1) {
                if (is_numeric($i)) {
                    //结尾是数字,如一千零五,直接累入
                    $result += $i;
                } else {
                    //结尾是倍数,如一千零五十,相乘累入
                    $result += $number * $unit[$i];
                }
                break;
            }
    
            //记录数字和倍数
            if (is_numeric($i)) {
                //数字
                $number = $i;
            } else {
                //倍数
                $multiple = isset($multiple) ? $multiple * $unit[$i] : $unit[$i];
            }
    
            //移到下一位
            $start++;
        }
        return $result;
    }
    
    
    $ch = "四万一千零五十";
    $result = ch2num($ch);
    printf("中文数字:%s, 转化后的阿拉伯数字:%d\n", $ch, $result);
    
    

    php8.0测试结果

    D:\www\test>php ch2num.php
    中文数字:四万一千零五十, 转化后的阿拉伯数字:41050
    

    相关文章

      网友评论

          本文标题:PHP 中文数字转阿拉伯数字

          本文链接:https://www.haomeiwen.com/subject/mozuqdtx.html