Thinkphp将中文年份转换为数字年份的问题
今天遇到一个问题:想将中文年份转换为数字年份,例如:“二零一六”-->‘2016’。
在网上搜了一下,没找到可以直接处理的函数(也许是我搜索信息的能力有限吧>_<)。那我就自己写一个呗,有点小激动呢。但是写完,发现在后面还是有点小问题。写得不好的地方,请各路大神批评指点哈~
1 /**
2 *将汉字的年份转换为数字年份
3 *@param string $string 汉字年份
4 *@return string 数字年份
5 */
6
7 function transformYearToNum($string){
8 $mb_str = array('零', '一', '二', '三', '四', '五', '六', '七', '八', '九');
9 $num_str = "";
10 for($i = 0;$i < strlen($string); $i++){
11 $str = mb_substr($string,$i,1);
12 if(in_array($str, $mb_str)){
13 $key = array_keys($mb_str, $str);
14 $num_str .= $key[0];
15 }
16 }
17
18 return date('Y', strtotime( $num_str));
19 }
上面的程序我在本地上测试,没什么问题。但是当我放到服务器上的thinkphp3.2.3的项目上时,就有了问题,if语句始终执行不了,后来我改成了这样的
1 /** 2 *将汉字的年份转换为数字年份 3 *@param string 汉字年份 4 *@return string 数字年份 5 */ 6 7 function transformYearToNum($string){ 8 $mb_str = array('零', '一', '二', '三', '四', '五', '六', '七', '八', '九'); 9 $num_str = ""; 10 for($i = 0;$i < strlen($string); $i+=3){ //这里也改成加 3 11 $str = mb_substr($string,$i,3); //这里 1 改成 3, 12 if(in_array($str, $mb_str)){ 13 $key = array_keys($mb_str, $str); 14 $num_str .= $key[0]; 15 } 16 } 17 return date('Y', strtotime($num_str)); 18 }
因为第一种方式截取出来的时候是乱码,然后我想到会不会是一个中文占三个字符,所以用第二种方式,结果可行。虽然免强可用,但对于健壮性也没考虑。还有我现在也不知道为什么本地第一种可以,在服务器上用tp3.2.3就不行。
第一次写博文,在这里给自己留下一个疑问吧,自己也是刚用tp3.2.3不久,请各路大神多多指教哈。