你们能帮我解释一下这里发生了什么。
$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" } }
如何保持一致性?
答案 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数组,其他任何东西都被编码为对象。