如何在PHP中保持数字为字符串

如何在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

我已经创建了请求FB实时更新的服务。Facebook返回的结果是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"}}]}]}
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!谢谢:)。实际上,在put
true,512之后,JSON\u BIGINT\u作为字符串
在JSON之后,我不需要再放置
var\u dump
了,因为它仍然保持为字符串