今天遇到一个问题:想将中文年份转换为数字年份,例如:“二零一六”-->‘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不久,请各路大神多多指教哈。

Thinkphp将中文年份转换为数字年份的问题的更多相关文章

  1. 剑指Offer面试题:35.将字符串转换为数字

    一.题目:将字符串转换为数字 题目:写一个函数StrToInt,实现把字符串转换成整数这个功能.当然,不能使用atoi或者其他类似的库函数. 二.代码实现 (1)考虑输入的字符串是否是NULL.空字符 ...

  2. Oracle 把秒转成时分秒格式(hh24:mm:ss);检测字符串是否是数字;字符串转换为数字

    不说废话,贴代码: CREATE OR REPLACE FUNCTION to_time(sec IN NUMBER) RETURN VARCHAR2 IS /*把秒转成时分秒格式 auth lzpo ...

  3. SQL SERVER 将表中字符串转换为数字的函数 (详询请加qq:2085920154)

    在SQL SERVER 2005中,将表中字符串转换为数字的函数共2个:1. convert(int,字段名)   例如:select convert(int,'3')2. cast(字段名 as i ...

  4. Swift3.0语言教程字符串转换为数字值

    Swift3.0语言教程字符串转换为数字值 Swift3.0语言教程字符串转换为数字值,在NSString中,开发者可以将字符串转换为数字值,通过这些数字值可以实现一些功能,如加法运算.减法运算等.数 ...

  5. 禁止输入中文 与 禁止输入数字在phonegap api环境效果

    例子如下: <!doctype html> <html> <head> <meta charset="utf-8"> <tit ...

  6. C语言中将字符串转换为数字的方法

    C语言提供了几个标准库函数,可以将字符串转换为任意类型(整型.长整型.浮点型等)的数字.以下是用atoi()函数将字符串转换为整数的一个例子: # include <stdio. h># ...

  7. js字符串转换为数字 总结

    a. 将一个字符串转换为数字的一种缺少些技巧但是很清楚明白的方法就是:把Number()构造函数作为一个函数来调用:  var number = Number(string_value); b. pa ...

  8. JavaScript字符串转换为数字

    今天在工作中碰到了一个问题,要将字符串转换为数字,否则函数不能正常工作, 特地研究了下,写了2个函数,供大家参考,代码如下: /** * 将字符串转换为数字 * @param {Object} str ...

  9. php urlencode函数 (中文字符转换为十六进制)

    urlencode()函数原理就是首先把中文字符转换为十六进制,然后在每个字符前面加一个标识符%. urldecode()函数与urlencode()函数原理相反,用于解码已编码的 URL 字符串,其 ...

随机推荐

  1. MergeSort 归并排序

    实现: 二路归并 public class TestMergeSort { public int[] mergeSortArray(int[] arr, int left, int right){ i ...

  2. c语言else匹配问题

    #include <stdio.h> #include <stdlib.h> //实现 依次输入三个递增的数 然后正确输出 //为什么得不到我们想要的结果呢 这就是else匹配 ...

  3. 解决方案--java执行cmd命令ProcessBuilder--出错Exception in thread "main" java.io.IOException: Cannot run program "dir d:\": CreateProcess error=2(xjl456852原创)

    当我尝试在java中通过ProcessBuilder运行window的cmd命令时出现错误: public static void main(String [] args) throws IOExce ...

  4. React 入门最好的实例-TodoList

    React 的核心思想是:封装组件,各个组件维护自己的状态和 UI,当状态变更,自动重新渲染整个组件. 最近前端界闹的沸沸扬扬的技术当属react了,加上项目需要等等原因,自己也决定花些时间来好好认识 ...

  5. onblur判断数字

    window.onload = function () { document.getElementById('text1').onblur = function () { if (isNaN(docu ...

  6. 类型“XXX”的控件“XXXX”必须放在具有 runat=server 的窗体标记内。

    问题:类型“Grid1”的控件“XXXX”必须放在具有 runat=server 的窗体标记内. 注:Grid1为表格的ID. 查找网上的解决大致为: 1)把Grid放到<form runat= ...

  7. Key lock 的秘密

    研究死锁,或者观察sp_lock,有时候最恼人的莫过于你看到下面研究成果的key lock,但是却不知道究竟是哪个page 哪个row被lock住了: Exec sp_lock:   就说上面的key ...

  8. .net简单页面后台绑定下拉框,按钮,分页 后台cs文件

    二.cs文件 using System;using System.Collections.Generic;using System.Web.UI;using System.Web.UI.WebCont ...

  9. SVN的初步使用方法

    1.需要公司提供SVN账号密码 2.cd 输入本地存储路径 3.输入服务器地址 --uesr= (账号名) --password=(账号密码) 4.本地路径会自动创建文件 5.经理会初始化项目 5.1 ...

  10. javaScript中获取鼠标位置的理解

    获取鼠标坐标值的总结为了避免混淆知识点 通过<javaScript高级程序设计>查到这些 event.clientX event.clientY event.pageX event.pag ...