2016-09-25 45 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數據庫平臺結構

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

的問題是,因爲這條線在這裏,

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