我在php json解码号码中遇到了一些麻烦。
$json = '[{"num":123456789011121314},{"num":1516171819202122232425}]';
$number = json_decode($json);
foreach($number as $num){
echo $num->num.'<br />';
//echo (int)$num->num.'<br />';
}
这将得到:
1.23456789011E+17
1.5161718192E+21
另外(int)做错了回调。如何获得原始数字?感谢。
我需要
123456789011121314
1516171819202122232425
答案 0 :(得分:4)
如果您使用的是PHP 5.4或更高版本,则可以执行以下操作:
$number = json_decode($json, true, 512, JSON_BIGINT_AS_STRING);
将表示那些大数字表示为字符串而不是整数。如果您可以访问生成json的代码,您还可以将数字编码为字符串。
答案 1 :(得分:1)
由于json结构并不复杂,我们可以使用简单的正则表达式来修复它。我们的想法是将数字括在双引号中。
$json = '[{"num":123456789011121314},{"num":1516171819202122232425}]';
$sanitized = preg_replace('/:(\w*\d+)/', ':"$1"', $json);
$number = json_decode($sanitized);
这对你来说应该和我一样好。
模式匹配冒号后跟一些可选的空格后跟一个数字。
答案 2 :(得分:0)