如何在PHP中将数字保留为字符串

时间:2015-04-16 06:51:24

标签: 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":"248874468652581_248878498652178","sender_id":1490984774509544,"created_time":1428654497,"sender_name":"Orlig Anbiz","message":"helo"}}]}]}

然后我想保留此JSON中的所有数据以存储在数据库中。我的问题在

"sender_id":1490984774509544,

哪个是发件人ID(没有双qoutes的数字)。然后当我将这个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

请帮助。提前谢谢。

4 个答案:

答案 0 :(得分:1)

$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)

答案 1 :(得分:0)

如果您不希望数据库将您的值解释为数字,请不要将其另存为数字。

您需要将其存储为非数字字符串数据类型,例如varchar,或者如果它太长,则text符合您的帐单。

在这种情况下, 您似乎正在为列使用float数据类型,只需登录phpmyadmin,并将该列的数据类型更改为上述类型之一。

更新: -

您可以使用"输入"更改变量数据类型。 在你的代码中......

$sender_id =  (string) $json_array['entry'][0]['changes'][0]['value']['sender_id'];

答案 2 :(得分:0)

docs中所述json_decode的默认行为是:

  

选项:JSON解码选项的位掩码。目前只支持JSON_BIGINT_AS_STRING(默认是将大整数转换为浮点数

因此,您需要将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应该没问题。

希望这有帮助!

答案 3 :(得分:-1)

=>您可以通过为其添加前缀来显式键入所需的变量:

var_dump((string) 125.334);

将返回:

string(8) "125.334"

=>您还可以使用方法settype

$var = 125.334;
settype($var, 'string');
var_dump($var);

将返回:

string(8) "125.334"

=>最简单的方法当然是第一个:)