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

时间:2016-09-25 18:49:26

标签: 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_encode($all);

mysql数据库结构

enter image description here

这是我运行脚本时的结果。

enter image description here

我希望json结构成为屏幕截图的右侧。任何人都知道什么是错的?

2 个答案:

答案 0 :(得分:1)

你需要清空$ option数组,然后像这样:

$option = []; //or $option = array(); in PHP < 5.4

这是为了不继续存储上一次迭代的数据。

所以:

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

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

}   
echo json_encode($all);

答案 1 :(得分:1)

问题在于这一行,

$option[$row['item_option_name']]=explode(',',$value);

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

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);