PHP实现汉字转整型数字,如:一百零一 转成101

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用
test();
/**
 * 测试
 */
function test() {
    echo CnToInt('一'); // 1
    echo CnToInt('十'); // 10
    echo CnToInt('十一'); // 11
    echo CnToInt('一百一十'); // 110
    echo CnToInt('一千零一'); // 1001
    echo CnToInt('一万零一百零一'); // 10101
    echo CnToInt('一亿一千三百万零三千零一'); // 113003001
    echo CnToInt('一千万亿'); // 11.0E+15
}

/**
 * 中文转数字
 * @param String $var 需要解析的中文数
 * @param Int $start 初始值
 * @return int
 */
function CnToInt($var, $start = 0) {
    if (is_numeric($var)) {
        return $var;
    }
    if (intval($var) === 0) {
        $splits = array('亿' => 100000000, '万' => 10000);
        $chars = array('万' => 10000, '千' => 1000, '百' => 100, '十' => 10, '一' => 1, '零' => 0);
        $Ints = array('零' => 0, '一' => 1, '二' => 2, '三' => 3, '四' => 4, '五' => 5, '六' => 6, '七' => 7, '八' => 8, '九' => 9, '十' => 10);
        $var = str_replace('零', "", $var);
        foreach ($splits as $key => $step) {
            if (strpos($var, $key)) {
                $strs = explode($key, $var);
                $start += CnToInt(array_shift($strs)) * $step;
                $var = join('', $strs);
            }
        }
        foreach ($chars as $key => $step) {
            if (strpos($var, $key) !== FALSE) {
                $vs = explode($key, $var);
                if ($vs[0] === "") {
                    $vs[0] = '一';
                }
                $start += $Ints[array_shift($vs)] * $step;
                $var = join('', $vs);
            } elseif (mb_strlen($var, 'utf-8') === 1) {
                $start += $Ints[$var];
                $var = '';
                break;
            }
        }
        return $start;
    } else {
        return intval($var);
    }
}

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:PHP实现下载图片的通用方法

下一篇:PHP清除对数据库的恶意代码输入