3

我正在尝试将字符串编号转换为整数,但它没有按预期工作这里是有问题的代码:

$usage['msisdn'] = "46720000000";
$usage['msisdn'] = (int)$usage['msisdn'];

echo $usage['msisdn'];

它将 2147483647 回显为整数,但我想将 46720000000 作为整数。
怎么了?

顺便说一句,我正在使用 json_encode(); 解析数据;


更新: 没关系,我可以使用 intval()

4

2 回答 2

7

那是因为 的最大值int322,147,483,647。您的电话号码超过此值。

您可以使用以下命令在服务器上找到 int 的最大值:

echo PHP_INT_MAX;

我认为将电话号码存储为整数是一种不好的做法,以后可能会影响您。为什么?因为电话号码可能以:

  • 国际长途电话00+
  • NDD0

此外,您可能希望在某些时候格式化电话号码,将其存储为字符串,从而使这部分变得更加容易。

圣诞节奖金 :) libphonenumber-for-php

于 2015-12-16T08:53:42.760 回答
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']);
于 2015-12-16T08:53:59.277 回答