如何在PHP中保持数字为字符串
我已经创建了请求FB实时更新的服务。Facebook返回的结果是JSON类型。它是这样的:如何在PHP中保持数字为字符串,php,json,facebook,facebook-graph-api,Php,Json,Facebook,Facebook Graph Api,我已经创建了请求FB实时更新的服务。Facebook返回的结果是JSON类型。它是这样的: {"object":"page","entry":[{"id":"248874468652581","time":1428654497,"changes":[{"field":"feed","value":{"item":"comment","verb":"add","comment_id":"248878481985513_367520770121283","parent_id":"2488744686
{"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"}}]}]}
The Sender ID = 1.4909847745095E+15
The Sender ID = 1490984774509544
$json_array = json_decode($jsonYouGotFromFacebook, true, 512, JSON_BIGINT_AS_STRING);
然后,我想保存这个JSON中的所有数据以存储在数据库中。我的问题是
"sender_id":1490984774509544,
这是发件人id(不带双qoutes的编号)。然后,当我将这个发送者id放入var中时,它会自动将其转换为float。我的php代码:
$sender_id = strval($json_array['entry'][0]['changes'][0]['value']['sender_id']);
echo nl2br("The Sender ID = $sender_id \n");
我的发件人id结果将如下所示:
{"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"}}]}]}
The Sender ID = 1.4909847745095E+15
The Sender ID = 1490984774509544
$json_array = json_decode($jsonYouGotFromFacebook, true, 512, JSON_BIGINT_AS_STRING);
我不希望发送方ID更改为float,但保留为字符串,该字符串应显示如下:
{"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"}}]}]}
The Sender ID = 1.4909847745095E+15
The Sender ID = 1490984774509544
$json_array = json_decode($jsonYouGotFromFacebook, true, 512, JSON_BIGINT_AS_STRING);
请帮忙。提前谢谢。如果您不希望数据库将您的值解释为数字,请不要将其另存为数字 您需要将其存储为非数字字符串数据类型,如
varchar
,或者如果它太长,则text
符合您的要求
在这种情况下,,
您似乎正在为列使用float
datatype,只需登录到phpmyadmin,并将该列的数据类型更改为上述类型之一
更新:-
您可以使用“类型转换”来更改变量数据类型。
在你的代码中
$sender_id = (string) $json_array['entry'][0]['changes'][0]['value']['sender_id'];
=>您可以通过添加前缀来显式键入所需的变量:
var_dump((string) 125.334);
将返回:
string(8) "125.334"
string(8) "125.334"
=>您也可以使用以下方法:
将返回:
string(8) "125.334"
string(8) "125.334"
=>最简单的方法当然是第一种:)
结果:
string '1490984774509544' (length=16)
json\u decode
的默认行为如中所述:
选项:JSON解码选项的位掩码。目前只支持JSON_BIGINT_AS_STRING(默认值是将大整数转换为浮点数)
因此,您需要添加JSON\u BIGINT\u作为字符串
作为$选项
参数:
json\u解码($json,$assoc=true,$depth=512,$options=json\u BIGINT\u AS\u STRING)
通过这种方式,您可以避免将大整数强制转换为浮点
因此,在您的情况下,您不应该更改$json_array
,而应该更改获取它的方式。你应该这样做:
{"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"}}]}]}
The Sender ID = 1.4909847745095E+15
The Sender ID = 1490984774509544
$json_array = json_decode($jsonYouGotFromFacebook, true, 512, JSON_BIGINT_AS_STRING);
而您的$json_数组
应该很好
希望这有帮助 试试$sender_id=settype($json_数组['entry'][0]['changes'][0]['value']['sender_id'],“string”);也许这会有帮助:谢谢你的快速回复。不,在进入数据库之前,当通过这一行时,它已经更改为浮动:
$sender\u id=strval($json\u array['entry'][0]['changes'][0]['value']['sender\u id'])代码>数据库中我的数据类型列是nvarcharyou save my day bro!谢谢:)。实际上,在puttrue,512之后,JSON\u BIGINT\u作为字符串
在JSON之后,我不需要再放置var\u dump
了,因为它仍然保持为字符串