【问题标题】:How to remain number as string in PHP如何在PHP中将数字保留为字符串
【发布时间】:2015-06-22 10:11:02
【问题描述】:

我创建了请求 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(没有双引号的数字)。然后当我把这个 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

请帮忙。提前谢谢你。

【问题讨论】:

标签: php json facebook facebook-graph-api


【解决方案1】:

json_decodedocs 中的默认行为是:

options: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 应该没问题。

希望这会有所帮助!

【讨论】:

    【解决方案2】:
    $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)
    

    【讨论】:

    • 你拯救了我的一天,兄弟!谢谢 :)。实际上,在将true,512,JSON_BIGINT_AS_STRING 放在 JSON 之后,我不再需要放置 var_dump,因为它保持为字符串
    【解决方案3】:

    => 您可以通过前缀显式键入您想要的变量:

    var_dump((string) 125.334);
    

    将返回:

    string(8) "125.334"
    

    =>你也可以使用settype的方法:

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

    将返回:

    string(8) "125.334"
    

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

    【讨论】:

      【解决方案4】:

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

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

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

      更新:-

      您可以使用“类型转换”来更改变量数据类型。 在您的代码中...

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

      【讨论】:

      • 感谢您的快速回复。不,在进入数据库之前,通过这一行时它已经变为浮动:$sender_id = strval($json_array['entry'][0]['changes'][0]['value']['sender_id']); 并且我在 db 中的数据类型列是 nvarchar
      猜你喜欢
      • 1970-01-01
      • 2019-05-26
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-09
      相关资源
      最近更新 更多