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