2016-09-25 4 views
1

入れ子になったJson構造をテストしようとしましたが、結果は間違った形式です。私は、スクリプトを実行したときにPHPが入れ子になった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のdatabas構造ここで

enter image description here

は結果です。

enter image description here

私は、JSONの構造は、スクリーンショットの右側になりたいです。誰が何が間違っているか知っていますか?

答えて

1

あなたはこのように、その後$オプションの配列を空にする必要があります:

$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); 
+0

これで問題は解決しましたか? –

1

問題は、あなたが$all以前に計算$options配列を付加している、ここにあるため、この行のwhile()ループの各反復で

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

です。代わりに、中間結果を保持するための一時配列を作成し、次のように各繰り返しでに追加します。

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); 
関連する問題