我在PHP中有以下示例代码:
$data = array(
'hello',
'world',
'hi'
);
$ret = array();
$ret['test'] = array();
$ret['testing'] = array();
foreach($data as $index => $value){
if($index < 1){
$ret['test'][$index]['val'] = $value;
$ret['test'][$index]['me'] = 'index < 1';
}
else {
$ret['testing'][$index]['val'] = $value;
$ret['testing'][$index]['me'] = 'index >= 1';
}
}
echo json_encode($ret);
我希望这是JSON输出:
[{
"test":[
{
"val": "hello",
"me": "index < 1"
}
],
"testing":[
{
"val": "world",
"me": "index >= 1"
},
{
"val": "hi",
"me": "index >= 1"
}
]
}]
然而,最终发生的事情是我最终得到以下结论:
[{
"test":[
{
"val": "hello",
"me": "index < 1"
}
],
"testing":{
"1":{
"val": "world",
"me": "index >= 1"
},
"2":{
"val": "hi",
"me": "index >= 1"
}
}
}]
"1"
和"2"
密钥尽管是int
,但在使用相同的计数器变量时尽管正确呈现test
仍会显示。有没有办法确保testing
成为JSON对象数组?
答案 0 :(得分:2)
因为数组不是以索引0
开头,而是以索引1
开头,所以它被编码为JSON对象而不是JSON数组。
您可以使用array_values()
功能删除索引并仅保留值。
示例:
$ret['testing'] = array_values($ret['testing'])
echo json_encode($ret);
但是因为此时您不需要索引,所以您也可以将代码重构为:
foreach($data as $index => $value){
if($index < 1){
$ret['test'][] = array(
'val' => $value,
'me' => 'index < 1'
);
}
else {
$ret['testing'][] = array(
'val' => $value,
'me' => 'index >= 1'
);
}
}
echo json_encode($ret);
这样,数组将始终以索引0
开头。