zoukankan      html  css  js  c++  java
  • PHP不使用内置函数intval(),实现字符串转整数

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

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

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

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

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

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

    //自定义字符串转int
    function myIntval ($str = '')
    {
        $len = strlen($str);
        $int = 0;
        $negative = false;//是否是负数
        for ($i = 0; $i < $len; $i++) {
            //第一位字符判断 正负
            if ($i == 0) {
                if ($str[$i] == '-') {
                    $negative = true;
                    continue;
                }
            }
            //判断字符是不是数字的ASCII码范围
            if ($str[$i] < '0' || $str[$i] > '9') {
                break;
            }
    
            $int *= 10;
            $num = $str[$i] - '0';//减去0的ASCII码就是数字本身[int类型]
            $int = $int + $num;
        }
        $int = $negative === true ? -$int : $int;
        return $int;
    }
    
    var_dump(myIntval('-1tt01t34t')); //输出: int(-1)
    var_dump(myIntval('-tt01t34t')); //输出: int(0)
    var_dump(myIntval('tt01t34t')); //输出: int(0)
    var_dump(myIntval('01t34t')); //输出: int(1)
    var_dump(myIntval('134t')); //输出: int(134)

    Note:

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

  • 相关阅读:
    自定义控件小结进阶篇
    SQL注入语句 (很全)
    C# winform DataGridView 属性说明 [C# .NET]
    MDI窗体程序中防止子窗体被多次实例化——Singleton的C#实现
    精妙SQL语句大全
    sql语句
    注销时关闭当前窗体,返回登入界面
    C#中DataGridView的使用 [C# .NET]
    C#开发 WinForm中窗体显示和窗体传值相关知识
    HDU2553 (N皇后)
  • 原文地址:https://www.cnblogs.com/deverz/p/11076453.html
Copyright © 2011-2022 走看看