2016-09-25 4 views
1

Я пытаюсь проверить отображение вложенной структуры Json, но результат находится в неправильном формате.php encoded вложенный 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

Проблема в том, что этой линии здесь,

$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); 
Смежные вопросы