我正在尝试将一个字符串数字转换为一个整数,但它没有按预期工作,这里是带有问题的代码:
$usage['msisdn'] = "46720000000";
$usage['msisdn'] = (int)$usage['msisdn'];
echo $usage['msisdn'];
它将2147483647作为整数回显,但我希望得到46720000000作为整数 怎么了?
顺便说一句,我使用json_encode();
解析数据更新: 没关系我已经使用了intval()
答案 0 :(得分:7)
这是因为int32
的最大值是2,147,483,647。您的电话号码超过此值。
您可以使用以下命令在服务器上找到int的最大值:
echo PHP_INT_MAX;
我认为将电话号码存储为整数是一种不好的做法,以后可能会对您产生影响。为什么?因为电话号码可能以:
开头00
或+
0
此外,您可能希望在某些时候格式化电话号码,将其存储为字符串使这部分更容易。
圣诞节奖金:) libphonenumber-for-php
答案 1 :(得分:4)
您的代码无法正常工作,因为根据您在系统中引用的系统将转换字符串转换为int作为最大值:
最大值取决于系统。 32位系统的最大有符号整数范围为-2147483648到2147483647.因此,例如在这样的系统上,intval('1000000000000')将返回2147483647.64位系统的最大有符号整数值为9223372036854775807。
来源:http://php.net/manual/en/function.intval.php
由于您无法轻松修改max_int值,因此您可以尝试使用转换来浮动。
$usage['msisdn'] = floatval($usage['msisdn']);