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

当在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, 'b'=>2),"secondarray"=>array('c'=>3),array('d'=>4));

json_encode($arrytest)

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

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

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

回答:

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}}

以上是 多维数组的JSON_ENCODE提供不同的结果 的全部内容, 来源链接: utcz.com/qa/411902.html

回到顶部