如何强制PHP的json_encode整数值编码为String?

时间:2015-11-14 07:08:08

标签: php json

我正在使用PHP v5.6。

正如我读到的那样,php json_encode函数会自动将int转换为string。但不是我的情况。 Json_encode仍然将它返回到int而不是字符串。

例如:

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

我的预期结果都变成了一个字符串。但我得到的是

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

预期产出:

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

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

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

3 个答案:

答案 0 :(得分:2)

在Thomas发表的评论中发布的链接中,您执行此操作的用户suggests

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

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

答案 1 :(得分:0)

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

使用strval() php将返回

  

var。

的字符串值

答案 2 :(得分:0)

为了确保潜在多维数组的所有数字“叶节点”都被转换为字符串,调用 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]}]}