平时我们用PHP时,将字符串转化为整型时,一般都是使用 intval() 内置函数,那么如果我们自己写,怎么写一个呢?

此时我们可以利用 ASCII 码计算得整数的特性,因为每个字符都对应一个 ASCII 码,当对这个字符做加减乘除的时候,实际上就是对ASCII 码做加减乘除操作,也就是整型操作,最终会返回一个整型数字。

也就是说:
'1' - '0' = 1;
'2' - '0' = 2;

数字0~9对应的十进制ASCII码为:

  1. 数字 ASCII
    0 48
  2. 1 49
  3. 2 50
  4. 3 51
  5. 4 52
  6. 5 53
  7. 6 54
  8. 7 55
  9. 8 56
  10. 9 57

类似intval()函数的实现方法为:

  1. //自定义字符串转int
  2. function myIntval ($str = '')
  3. {
  4. $len = strlen($str);
  5. $int = 0;
  6. $negative = false;//是否是负数
  7. for ($i = 0; $i < $len; $i++) {
  8. //第一位字符判断 正负
  9. if ($i == 0) {
  10. if ($str[$i] == '-') {
  11. $negative = true;
  12. continue;
  13. }
  14. }
  15. //判断字符是不是数字的ASCII码范围
  16. if ($str[$i] < '0' || $str[$i] > '9') {
  17. break;
  18. }
  19.  
  20. $int *= 10;
  21. $num = $str[$i] - '0';//减去0的ASCII码就是数字本身[int类型]
  22. $int = $int + $num;
  23. }
  24. $int = $negative === true ? -$int : $int;
  25. return $int;
  26. }
  27.  
  28. var_dump(myIntval('-1tt01t34t')); //输出: int(-1)
  29. var_dump(myIntval('-tt01t34t')); //输出: int(0)
  30. var_dump(myIntval('tt01t34t')); //输出: int(0)
  31. var_dump(myIntval('01t34t')); //输出: int(1)
  32. var_dump(myIntval('134t')); //输出: int(134)

Note:

Redis 中的字符串转整型的函数也是基于ASCII相减去实现的。

PHP不使用内置函数intval(),实现字符串转整数的更多相关文章

  1. Freemarker 内置函数 数字、字符串、日期格式化用法介绍

    在用FreeMarker过程中,感觉FreeMarker的字符串,日期,集合等处理能力还是很强大的,上网搜了一些资料,整理如下,以便能帮助大家更熟练的应用Freemarker完成项目开发. 一.Seq ...

  2. Python数据类型的内置函数之str(字符串)

    Python数据类型内置函数 - str(字符串) - list(列表) - tuple(元组) - dict(字典) - set(收集) str(字符串)的一些操作 - 字符串相连方法 # 字符串的 ...

  3. 【SQL】MySQL内置函数中的字符串函数和日期时间函数

    字符串函数 --拼接字符串组成新的字符串 Select concat(‘A’,’B’); --返回字符串长度 Select length(“CAT”) --返回子字符串在字符串中首次出现的位置,没有返 ...

  4. Python---基础----数据类型的内置函数(主要介绍字符串、列表、元组、字典、集合的内置函数)(二)

    2019-05-24 -------------------------------- 一. # splitlines()    以换行切割字符串s = '''日照香炉生紫烟\n疑是银河落九天\n飞流 ...

  5. 【mysql】mysql内置函数

    mysql常用内置函数 1.mysql字符串函数 contact 字符串连接函数 mysql>select contact("he",'llo');# hello lcase ...

  6. python基础之常用内置函数

    前言 python有许多内置的函数,它们定义在python的builtins模块,在python的代码中可以直接使用它们. 常用的内置函数 类型转换 int python的整数类型都是int类型的实例 ...

  7. 巨蟒python全栈开发-第14天 内置函数2 递归 二分查找

    一.今日内容总览 1.内置函数补充 repr() 显示出字符串的官方表示形式 chr() arscii码中的字,转换成位置 ord() arscii码中的位置,转换成字2.递归 自己调用自己 两个口: ...

  8. mysql 内置函数大全 mysql内置函数大全

    mysql 内置函数大全 2013年01月15日 19:02:03 阅读数:4698 对于针对字符串位置的操作,第一个位置被标记为1. ASCII(str) 返回字符串str的最左面字符的ASCII代 ...

  9. Day3 - Python基础3 函数基本、递归函数、内置函数

    本节内容 1. 函数基本语法及特性 2. 参数与局部变量 2.2. 函数变量作用域 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 1. 函数基本语法及 ...

随机推荐

  1. mybatis001-动态标签Trim用法

    Mybatis动态标签Trim用法 一.<trim></trim>标签用法 示例一: select * from user <trim prefix="WHER ...

  2. Mac--PHP已经开启gd扩展验证码不显示

    错误显示:Call to undefined function imagettftext() 原因: mac系统中自带的php的gd库中,缺少对freetype的支持,导致图片无法显示. 解决: 1 ...

  3. java webservice - cxf使用总结 一

    1.创建maven项目 加入pom依赖 <dependency> <groupId>org.apache.cxf</groupId> <artifactId& ...

  4. Python:库文件

    可以引用的Python文件:自己写的.py + 外部库(external libraries)

  5. hive DML操作

    1.数据导入 1)向表中装载数据(load) 语法 hive> load data [local] inpath '/opt/module/datas/student.txt' [overwri ...

  6. SA & SAM

    后缀数组SA \(sa[i]\)与\(rk[i]\) \(sa[i]\) 表示排名为 \(i\) 的后缀是哪一个(在原串中开头位置). \(rk[i]\)(或\(rank[i]\))表示开头位置是 \ ...

  7. TP5.1+Vue前后端分离实践

    配置: 主域名 www.demo.xyz 二级子域名 api.demo.xyz 列表项目其中api.demo.xyz加入了版本控制,使用的是URL路由传入方式 在route.php路由文件中配置,如下 ...

  8. Python所有转义字符总汇

    转义字符就是让程序按照已经设置好的字符输出,不然程序当成其他的输出了,下面总结所有python转义字符 \\ 反斜杠符号\' 单引号\" 双引号\a 响铃\b 退格(Backspace)\e ...

  9. Webpack Loader种类以及执行顺序

    我们在用webpack构建项目的时候,有两种配置打包文件的方式: import或者require :a-loader!b-loader!.././static/dog.png(打包某一个文件) 配置w ...

  10. select 项目<选课系统>

    """1. 创建北京.上海 2 所学校 学校类对象 属性:名字,地址 行为: 2. 创建linux , python , go 3个课程 , linux\py 在北京开, ...