php 汉字怎么转阿拉伯数
程序员文章站
2022-03-13 08:33:10
...
php汉字转阿拉伯数的方法:1、创建一个PHP示例文件;2、初始化一个数组;3、将字符串按单位切分;4、将分组后的字符串转化成数字并乘以单位即可。
本文操作环境:Windows7系统、PHP7.1版、DELL G3电脑
php 汉字怎么转阿拉伯数?
php中文转阿拉伯数字
面试题,当时写了一个漏洞百出,被人鄙视了,所以回来用一上午写了一个,自己测试了一下,好像还可以。
思路
如中文数字
七百七十八万亿四千七百二十亿七千五百七十万四千四百八十六
如果把红色文字看做单位,那么用这些单位分割后,其他部分都是个十百千的数字。把这些数字乘以其单位求和,就是结果了。
代码
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('/(?<!^)(?!$)/u', $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如何将float转int?
下一篇: php中如何从函数中返回值