PHP JSON_Encode无效

时间:2013-08-02 14:18:49

标签: php arrays json encode var-dump

这是我要编码为JSON的数组的var_dump:

array(3) { 
    [0]=> array(2) { 
        ["From"]=> string(14) "08 August 2013"
        ["To"]=> string(14) "21 August 2013"
    }
    [1]=> array(2) {
        ["From"]=> string(14) "11 August 2013"
        ["To"]=> string(14) "21 August 2013"
    }
    [2]=> array(2) { 
        ["From"]=> string(14) "12 August 2013" 
        ["To"]=> string(14) "01 August 2013" 
    } 
}

编码时,输出如下:

[
 {"From":"08 August 2013","To":"21 August 2013"},
 {"From":"11 August 2013","To":"21 August 2013"},
 {"From":"12 August 2013","To":"01 August 2013"}
]

但我希望它是这样的:

{
 0:{"From":"08 August 2013","To":"21 August 2013"}, 
 1:{"From":"11 August 2013","To":"21 August 2013"}, 
 2:{"From":"12 August 2013","To":"01 August 2013"}
}

这是可能的,因为我之前已经完成了,但现在使用相同的代码它将无法正常工作

4 个答案:

答案 0 :(得分:4)

使用:JSON_FORCE_OBJECT参数;

$json = json_encode($array,JSON_FORCE_OBJECT);

这将分配数字键

答案 1 :(得分:0)

两个版本都是等价的。默认情况下,JS会对以0开头的数组元素进行编号,所以即使它们没有被指定,当你稍后解码时,你仍然会得到0,1,2,....作为索引。

您可以通过解码字符串来简单地验证这一点,例如

$array = array('your array here');
$json = json_encode($array);
$decoded_array = json_decode($json);
var_dump($decoded_array);

答案 2 :(得分:0)

如果你想要那些索引,因为你想要一个json对象数组,你不需要它们,因为你已经拥有那个[],如果你想在数组中选择那些你已经可以使用索引的任何对象[ ]喜欢:

例如[0]。从;

每个{}表示一个json对象,[{},{},{}]表示一个对象数组。

答案 3 :(得分:0)

很多时候,当我们的数组内容未编码时,就会发生这种情况。通常,我们使用UTF-8编码。

因此,要解决此问题,只需添加

mysqli_set_charset($con, 'utf8');

就在连接之后。