PHP不使用内置函数intval(),实现字符串转整数

平时咱们用PHP时,将字符串转化为整型时,通常都是使用 intval() 内置函数,那么若是咱们本身写,怎么写一个呢?函数

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

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

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

数字 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:io

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

相关文章
相关标签/搜索