如何在 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 应该没问题。

希望对您有所帮助!