例如我有以下数组: -
$menu = array(
"result"=>array(
"food"=>array(
"Nasi Padang",
"Kentang Goreng",
"Potato Wedges"
),
"drink"=>array(
"Bajigur",
"AO",
"Sabun"
)
)
);
使用json_encode
上述代码变为: -
{
"result":{
"food":[
"Nasi Padang",
"Kentang Goreng",
"Potato Wedges"
],
"drink":[
"Bajigur",
"AO",
"Sabun"
]
}
}
正如您所看到的,result
数组成为一个对象而不是以数组的形式保留,这可能是因为JavaScript没有开箱即用的关联数组。
那么,有没有将result
(在做json_decode
之后)作为数组处理而没有像(array)
这样的任何演员?
编辑: 响应Anant的回复/评论,我在我的localhost中尝试了以下代码
$test = new stdClass;
$test->count = 1337;
$test->page = 2;
$menu = array(
"test"=>$test,
"result"=>array(
"food"=>array(
"Nasi Padang",
"Kentang Goreng",
"Potato Wedges"
),
"drink"=>array(
"Bajigur",
"AO",
"Sabun"
)
)
);
$json = json_encode($menu);
echo print_r(json_decode($json, true));
结果
Array
(
[test] => Array
(
[count] => 1337
[page] => 2
)
[result] => Array
(
[food] => Array
(
[0] => Nasi Padang
[1] => Kentang Goreng
[2] => Potato Wedges
)
[drink] => Array
(
[0] => Bajigur
[1] => AO
[2] => Sabun
)
)
)
答案 0 :(得分:0)
正如您所看到的,结果数组成为一个对象而不是保持数组的形式,这可能是因为JavaScript没有开箱即用的关联数组。
这是因为在JSON中,普通对象与PHP中的关联数组具有相同的用途。唯一的区别是它没有订购。
JSON没有具有已命令的命名属性的数据结构。要实现这一点,您需要使用一组对象,例如:
[
{ "name" : "foo", "value" : 1 },
{ "name" : "bar", "value" : 2 }
]
所以,无论如何将结果(在执行json_decode之后)作为数组处理而没有像(数组)这样的任何转换?
来自the manual:
assoc:当为TRUE时,返回的对象将被转换为关联数组。
因此,将json_decode
的第二个参数设置为true
。