我的数组如下:
$array = ['id' => '76561198165327575'];
我需要它在客户端使用JavaScript。所以我试图用JSON_NUMERIC_CHECK
编码:
json_encode($array, JSON_NUMERIC_CHECK);
得到的结果如下:
{"id":7.6561198165328e+16}
但它应该是:
{"id":76561198165327575}
有什么问题?
(Azure,Windows,5.6)
答案 0 :(得分:2)
JSON_NUMERIC_CHECK
基本上告诉编码器“如果它看起来像一个数字,将其编码为数字”:
php > $x = '123456789012234567890';
php > echo json_encode($x, JSON_NUMERIC_CHECK);
1.2345678901223e+20
php > echo json_encode($x);
"123456789012234567890"
由于您的号码超出了平台上INT的可表示范围,因此您将获得一个浮点数。
答案 1 :(得分:0)
您超出了32位系统上的整数范围。 documentation描述了当发生这种情况时,数字将转换为浮点数。
如果PHP遇到超出整数类型边界的数字,则会将其解释为float。此外,导致超出整数类型边界的数字的操作将返回浮点数。
答案 2 :(得分:0)
如果您使用大数字(大于PHP_MAX_INT)对JSON对象进行编码,您将始终获得浮点值。唯一的解决方案是将它们作为字符串(您已经)存储在对象/数组中,而不是使用JSON_NUMERIC_CHECK(但将字符串转换为客户端上的数字)或编写自己的编码例程。