php以错误格式编码嵌套的json

php以错误格式编码嵌套的json,php,json,Php,Json,我试图测试显示一个嵌套的Json结构,但结果格式错误 php while($row=$statement->fetch()){ $value=str_replace('"','',$row['item_option_value']); $option[$row['item_option_name']]=explode(',',$value); $all[$row['oid']]=$option; } echo json_en

我试图测试显示一个嵌套的Json结构,但结果格式错误

php

while($row=$statement->fetch()){

        $value=str_replace('"','',$row['item_option_value']);
        $option[$row['item_option_name']]=explode(',',$value);
        $all[$row['oid']]=$option;

    }   
echo json_encode($all);
mysql数据库结构

下面是我运行脚本时的结果


我希望json结构位于屏幕截图的右侧。有人知道怎么回事吗?

您需要清空$option数组,然后如下所示:

$option = []; //or $option = array(); in PHP < 5.4
while($row=$statement->fetch()){
    $opArray = array();
    $value=str_replace('"','',$row['item_option_value']);
    $opArray[$row['item_option_name']]=explode(',',$value);
    $all[$row['oid']]=$opArray;

}   
echo json_encode($all);

问题是因为这条线

$option[$row['item_option_name']]=explode(',',$value);
while()
循环的每次迭代中,您都将先前计算的
$options
数组追加到
$all
。相反,创建一个临时数组来保存中间结果,并在每次迭代中将其附加到
$all
,如下所示:

$option = []; //or $option = array(); in PHP < 5.4
while($row=$statement->fetch()){
    $opArray = array();
    $value=str_replace('"','',$row['item_option_value']);
    $opArray[$row['item_option_name']]=explode(',',$value);
    $all[$row['oid']]=$opArray;

}   
echo json_encode($all);