如何在 PHP 中将数字保留为字符串
How to remain number as string in PHP
我已经创建了请求 FB 进行实时更新的服务。 Facebook return 的结果是 JSON 类型。是这样的:
{"object":"page","entry":[{"id":"248874468652581","time":1428654497,"changes":[{"field":"feed","value":{"item":"comment","verb":"add","comment_id":"248878481985513_367520770121283","parent_id":"248874468652581_248878498652178","sender_id":1490984774509544,"created_time":1428654497,"sender_name":"Orlig Anbiz","message":"helo"}}]}]}
然后我想将此 JSON 中的所有数据保存在数据库中。我的问题在
"sender_id":1490984774509544,
这是发件人ID(没有双引号的数字)。然后当我把这个 sender_id 放在 var 中时,它会自动将其转换为 float。我的 php 代码:
$sender_id = strval($json_array['entry'][0]['changes'][0]['value']['sender_id']);
echo nl2br("The Sender ID = $sender_id \n");
我的 sender_id 结果会变成这样:
The Sender ID = 1.4909847745095E+15
我不希望发件人 ID 更改为浮点数,而是保留为应该显示如下的字符串:
The Sender ID = 1490984774509544
请帮助。提前谢谢你。
如果您不希望数据库将您的值解释为数字,请不要将其保存为数字。
您需要将其存储为非数字字符串数据类型,例如 varchar
或者如果它太长则 text
适合您的要求。
在这种情况下,
您似乎正在为该列使用 float
数据类型,只需登录到 phpmyadmin,并将该列的数据类型更改为上述类型之一。
更新:-
您可以使用"type casting" 来改变变量的数据类型。
在您的代码中...
$sender_id = (string) $json_array['entry'][0]['changes'][0]['value']['sender_id'];
=> 你可以明确地输入你想要的变量,通过前缀:
var_dump((string) 125.334);
将 return :
string(8) "125.334"
=> 你也可以使用方法 settype :
$var = 125.334;
settype($var, 'string');
var_dump($var);
将 return :
string(8) "125.334"
=>最简单的方法当然是第一种:)
$var = json_decode('{"object":"page","entry":[{"id":"248874468652581","time":1428654497,"changes":[{"field":"feed","value":{"item":"comment","verb":"add","comment_id":"248878481985513_367520770121283","parent_id":"248874468652581_248878498652178","sender_id":1490984774509544,"created_time":1428654497,"sender_name":"Orlig Anbiz","message":"helo"}}]}]}',true,512,JSON_BIGINT_AS_STRING);
var_dump((($var['entry'][0]['changes'][0]['value']['sender_id'])));
结果:
string '1490984774509544' (length=16)
如 docs 中所述,json_decode
的默认行为是:
options: Bitmask of JSON decode options. Currently only JSON_BIGINT_AS_STRING is supported (default is to cast large integers as floats)
因此您需要添加 JSON_BIGINT_AS_STRING
作为 $option
参数:
json_decode ( $json, $assoc = true, $depth = 512, $options = JSON_BIGINT_AS_STRING )
这样您就可以避免 json_decode
将大整数转换为浮点数。
因此,在您的情况下,您不应更改 $json_array
,而应更改获取它的方式。你应该这样做:
$json_array = json_decode($jsonYouGotFromFacebook, true, 512, JSON_BIGINT_AS_STRING);
你的 $json_array
应该没问题。
希望对您有所帮助!
我已经创建了请求 FB 进行实时更新的服务。 Facebook return 的结果是 JSON 类型。是这样的:
{"object":"page","entry":[{"id":"248874468652581","time":1428654497,"changes":[{"field":"feed","value":{"item":"comment","verb":"add","comment_id":"248878481985513_367520770121283","parent_id":"248874468652581_248878498652178","sender_id":1490984774509544,"created_time":1428654497,"sender_name":"Orlig Anbiz","message":"helo"}}]}]}
然后我想将此 JSON 中的所有数据保存在数据库中。我的问题在
"sender_id":1490984774509544,
这是发件人ID(没有双引号的数字)。然后当我把这个 sender_id 放在 var 中时,它会自动将其转换为 float。我的 php 代码:
$sender_id = strval($json_array['entry'][0]['changes'][0]['value']['sender_id']);
echo nl2br("The Sender ID = $sender_id \n");
我的 sender_id 结果会变成这样:
The Sender ID = 1.4909847745095E+15
我不希望发件人 ID 更改为浮点数,而是保留为应该显示如下的字符串:
The Sender ID = 1490984774509544
请帮助。提前谢谢你。
如果您不希望数据库将您的值解释为数字,请不要将其保存为数字。
您需要将其存储为非数字字符串数据类型,例如 varchar
或者如果它太长则 text
适合您的要求。
在这种情况下,
您似乎正在为该列使用 float
数据类型,只需登录到 phpmyadmin,并将该列的数据类型更改为上述类型之一。
更新:-
您可以使用"type casting" 来改变变量的数据类型。 在您的代码中...
$sender_id = (string) $json_array['entry'][0]['changes'][0]['value']['sender_id'];
=> 你可以明确地输入你想要的变量,通过前缀:
var_dump((string) 125.334);
将 return :
string(8) "125.334"
=> 你也可以使用方法 settype :
$var = 125.334;
settype($var, 'string');
var_dump($var);
将 return :
string(8) "125.334"
=>最简单的方法当然是第一种:)
$var = json_decode('{"object":"page","entry":[{"id":"248874468652581","time":1428654497,"changes":[{"field":"feed","value":{"item":"comment","verb":"add","comment_id":"248878481985513_367520770121283","parent_id":"248874468652581_248878498652178","sender_id":1490984774509544,"created_time":1428654497,"sender_name":"Orlig Anbiz","message":"helo"}}]}]}',true,512,JSON_BIGINT_AS_STRING);
var_dump((($var['entry'][0]['changes'][0]['value']['sender_id'])));
结果:
string '1490984774509544' (length=16)
如 docs 中所述,json_decode
的默认行为是:
options: Bitmask of JSON decode options. Currently only JSON_BIGINT_AS_STRING is supported (default is to cast large integers as floats)
因此您需要添加 JSON_BIGINT_AS_STRING
作为 $option
参数:
json_decode ( $json, $assoc = true, $depth = 512, $options = JSON_BIGINT_AS_STRING )
这样您就可以避免 json_decode
将大整数转换为浮点数。
因此,在您的情况下,您不应更改 $json_array
,而应更改获取它的方式。你应该这样做:
$json_array = json_decode($jsonYouGotFromFacebook, true, 512, JSON_BIGINT_AS_STRING);
你的 $json_array
应该没问题。
希望对您有所帮助!