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不久,请各路大神多多指教哈。

 

posted @ 2016-12-13 13:06  文哥有话说  阅读(763)  评论(0编辑  收藏  举报