PHP JSON编码在取消设置时将键转换为字符串

时间:2013-08-20 19:56:15

标签: php json

你们能帮我解释一下这里发生了什么。

$data[0] = array("one" => "uno", "two" => "dos", "three" => "tres");
$data[1] = array("one" => "uno", "two" => "dos", "three" => "tres");

//unset($data[0]);

$encode = json_encode($data);

$decode = json_decode($encode);

var_dump($decode);

输出:

array(2) { [0]=> object(stdClass)#1 (3) { ["one"]=> string(3) "uno" ["two"]=> string(3) "dos" ["three"]=> string(4) "tres" } [1]=> object(stdClass)#2 (3) { ["one"]=> string(3) "uno" ["two"]=> string(3) "dos" ["three"]=> string(4) "tres" } }

这是正常的,将它保持为数组,但是一旦我取消设置数组的一部分,它就会把它变成一个对象。

$data[0] = array("one" => "uno", "two" => "dos", "three" => "tres");
$data[1] = array("one" => "uno", "two" => "dos", "three" => "tres");

unset($data[0]);

$encode = json_encode($data);

$decode = json_decode($encode);

var_dump($decode);

输出:

object(stdClass)#1 (1) { ["1"]=> object(stdClass)#2 (3) { ["one"]=> string(3) "uno" ["two"]=> string(3) "dos" ["three"]=> string(4) "tres" } }

如何保持一致性?

3 个答案:

答案 0 :(得分:1)

正如Marc B在评论中解释的那样,您需要将数组重新索引为从零开始的索引。在PHP中可以使用array_values

完成
$encode = json_encode(array_values($data));

参见:

答案 1 :(得分:1)

我会在选项中查看json_encode。我认为JSON_FORCE_OBJECT应该强制不变。

答案 2 :(得分:0)

Javascript区分数组和对象。 PHP只有一次覆盖这两种类型的数组。

连续数字0启动PHP数组被编码为Javascript数组,其他任何东西都被编码为对象。