【问题标题】:How can I force PHP's json_encode integer values to be encoded as String?如何强制 PHP 的 json_encode 整数值编码为字符串?
【发布时间】:2015-11-14 07:08:08
【问题描述】:

我正在使用 PHP v5.6。

当我读到 php json_encode 函数会自动将 int 转换为字符串。但在我的情况下不是。 Json_encode 仍然是返回 int 而不是 string。

例如:

json_encode(['code' => 200, 'results' => [id=> 1]]);

我的预期结果全部变成了字符串。但我得到的是

{"code":200,"results":{"id": 1}}

预期输出:

{"code":"200","results":{"id": "1"}}

如何在不为每个值使用“”的情况下将所有结果更改为字符串?

注意:结果数组基于查询。

【问题讨论】:

    标签: php json


    【解决方案1】:

    在 Thomas 在 cmets 中发布的链接中,一位用户 suggests 表示您这样做:

    $data = json_encode(array_map('strval', $data));
    

    但这在性能方面可能不是最有效的,因为数组上的每个条目都将通过 strval 函数。

    【讨论】:

    • 是的。最后我找到了正确使用 array_map 和 array walk 的方法。因此它可以自动将所有 int 更改为 string。感谢您的提醒!
    • 如果输入数组保证是一维的,这只是一种合适的技术。不然会出问题3v4l.org/GcIma
    • @Marcos Dimitrio 感谢您的回答,它的作用就像魅力一样。
    【解决方案2】:
    json_encode(['code' => 200, 'results' => [id=> strval(1)]]);
    

    使用strval() php 会返回

    var 的字符串值。

    【讨论】:

    • 是的。我使用strval。但它来自查询结果。如果我使用 strval,那么使用 strval() 会很有价值
    • @sstarlight 你害怕它可能会影响性能吗?使用 strval() 会很有价值的问题到底是什么?
    • 我的意思是。如果内部结果。我有 50 个值。它需要转换为strval。效率不够。
    • 是的,在结果集中的 50 列上手动调用 strval() 会相当费力。
    【解决方案3】:

    要确保潜在多维数组的所有数字“叶节点”都转换为字符串,请调用array_walk_recursive() 并对每种值类型进行有条件的更改。通过检查值是否为“数字”,您可以防止 null 和布尔值等值被转换为字符串。

    代码:(Demo)

    $array = [
        'code' => 200,
        'results' => [
            'id' => 1
        ],
        'a' => [
            [
                'b' => [
                    4,
                    null,
                    false
                ]
            ]
        ]
    ];
    
    array_walk_recursive(
        $array,
        function(&$v) {
            if (is_numeric($v)) {
                $v = strval($v);
            }
        }
    );
    echo json_encode($array);
    

    输出:

    {"code":"200","results":{"id":"1"},"a":[{"b":["4",null,false]}]}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-27
      • 2011-07-22
      • 1970-01-01
      • 2011-08-25
      • 2019-03-02
      • 2012-10-08
      • 1970-01-01
      • 2021-02-27
      相关资源
      最近更新 更多