微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

多维数组的JSON_ENCODE提供不同的结果

如何解决多维数组的JSON_ENCODE提供不同的结果

在JSON中,[]只有每个数组都有数字键,而对象则{}具有字符串属性。在第二个示例中,如果包含数组键,则必然迫使整个外部结构成为对象。由于包含字符串键,因此两个示例的内部对象都被制成对象a,b,c,d

如果要JSON_FORCE_OBJECT在第一个示例中使用该选项,则应返回与第二个示例类似的结构,而外部结构是对象而不是数组。如果未指定您希望将其作为对象,则外部数组中不存在字符串键会导致PHP假定将其编码为JSON中的等效数组结构。

$arrytest = array(array('a'=>1, 'b'=>2),array('c'=>3),array('d'=>4));

// Force the outer structure into an object rather than array
echo json_encode($arrytest , JSON_FORCE_OBJECT);

// {"0":{"a":1,"b":2},"1":{"c":3},"2":{"d":4}}

解决方法

当在PHP中对多维数组进行json_encode编码时,我只是通过命名一个数组而不是不命名它们来注意到一个不同的输出。例如:

$arrytest = array(array('a'=>1,'b'=>2),array('c'=>3),array('d'=>4));
json_encode($arrytest)

给出多个json对象的单个数组

[{"a":1,"b":2},{"c":3},{"d":4}];

而只需为中间数组分配一个名称

$arrytest = array(array('a'=>1,"secondarray"=>array('c'=>3),array('d'=>4));
json_encode($arrytest)

创建一个带有多个json对象的单个json对象

{"0":{"a":1,"secondarray":{"c":3},"1":{"d":4}};

为什么第一个选项不返回与第二个执行点相同的结果,并用“ 1”代替“ secondarray”

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。