>백엔드 개발 >PHP 문제 >PHP에서 한자를 아라비아 숫자로 변환하는 방법

PHP에서 한자를 아라비아 숫자로 변환하는 방법

藏色散人
藏色散人원래의
2021-11-01 11:07:221477검색

PHP에서 중국어 문자를 아라비아 숫자로 변환하는 방법: 1. PHP 샘플 파일을 만듭니다. 2. 배열을 초기화합니다. 3. 문자열을 단위로 나눕니다. 4. 그룹화된 문자열을 숫자로 변환하고 단위를 곱합니다. 할 수 있다.

PHP에서 한자를 아라비아 숫자로 변환하는 방법

이 기사의 운영 환경: Windows 7 시스템, PHP 버전 7.1, DELL G3 컴퓨터

php 한자를 아라비아 숫자로 변환하는 방법은 무엇입니까?

php 중국어에서 아라비아 숫자로

인터뷰 질문 당시 허점 가득한 글을 썼고, 남들에게 멸시를 받아서 돌아와서 오전에 글을 쓰고 직접 테스트해본 결과 그런 것 같았습니다. 괜찮아요.

생각

중국 숫자 등

칠백칠십팔조, 사천칠십이억, 칠천오백만칠억사만사천팔십육

빨간 글씨가 하나의 단위로 간주하고, 이 단위로 나누면 나머지 부분은 십, 백, 천의 숫자가 됩니다. 이 숫자에 단위를 곱하고 합산하여 결과를 얻습니다.

Code

function ch2num($str){
    //单位数组用于循环遍历,单位顺序从大到小
    $c = [
        '万亿'=>1000000000000,
        '亿' => 100000000,
        '万' => 10000,
    ];
    //中文替换数字规则,零没什么卵用;所以去掉
    $b = [
        '一' =>1,
        '二' =>2,    
        '三' =>3,
        '四' =>4,
        '五' =>5,
        '六' =>6,
        '七' =>7,
        '八' =>8,
        '九' =>9,
        '零' =>'',
    ];
    //替换数字
    $str =  str_replace(array_keys($b), array_values($b), $str);
    //结果 7百7十8万亿4千7百2十亿7千5百7十万4千4百8十
  //如果字符串以十开头,前边加1
    if(mb_strpos($str, '十' ,0 ,'utf-8') === 0)
        $str = '1'.$str;
      
    //初始化一个数组
    $arr[] = array(
        'str'    => $str, //字符串
        'unit'  => 1,     //单位
    );
    //将字符串按单位切分
    foreach ($c as $key => $value) {
        $brr = [];
        foreach ($arr as $item) {
            if(strpos($item['str'], $key)){
                $sun = explode($key, $item['str'],2);
                $brr[] = [
                    'str' => $sun[0],
                    'unit' => $value,
                ];
                $brr[] = [
                    'str' => $sun[1],
                    'unit' => $item['unit'],
                ];
            }else{
                $brr[] = $item;
            }
        }
        $arr = $brr;
    }
    /*    结果
        (
        [0] => Array
            (
                [str] => 7百7十8
                [unit] => 1000000000000
            )
        [1] => Array
            (
                [str] => 4千7百2十
                [unit] => 100000000
            )
        [2] => Array
            (
                [str] => 7千5百7十
                [unit] => 10000
            )
        [3] => Array
            (
                [str] => 4千4百8十6
                [unit] => 1
            )
        )*/
    //遍历求和
    $sum = 0;
    foreach ($arr as $item) {
        $sum += getNum($item['str'],$item['unit']);
    }
    return $sum;
}
//将分组后的字符串转化成数字,并乘以单位
function getNum($str,$st){
    //倍数
    $a = [
        '千'=>1000,
        '百'=>100,
        '十'=>10
    ];
    //开始值
    $num = 0;
    //当前值所在位数
    $step = 1;
    //单位
    $un = 1;
    $arr =  preg_split(&#39;/(?<!^)(?!$)/u&#39;, $str);
    while (count($arr)) {
        $m = array_pop($arr);
        //如果是位数;更新倍数
        if(!empty($a[$m])){
            $step = $a[$m];
        }
        if(is_numeric($m)){
            $num += $m * $step;
        }
    }
    return $num * $st;
}

추천 학습: "PHP 비디오 튜토리얼"

위 내용은 PHP에서 한자를 아라비아 숫자로 변환하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.