2015-05-10 26 views
8

Mam dwie tabele, tabela 1 ma 2 pola (question_pk, nazwa pytania), a tabela 2 ma 4 pola (ans_pk, opcje, question_fk i right_answer). Chcę utworzyć json jak następującej strukturzeUtwórz zagnieżdżony obiekt json za pomocą php mysql

{ 
    "type": "quiz", 
    "name": "Brand Colors", 
    "description": "Can you identify these brands by the background color?", 
    "questions": [ 
     { 
      "name": "Can you identify this color?", 
      "description": "#ea4c89", 
      "answers": [ 
       { 
        "name": "Dribbble", 
        "description": "dribbble.png", 
        "weight": 1 
       }, 
       { 
        "name": "Amazon", 
        "description": "amazon.png", 
        "weight": 0 
       }, 
       { 
        "name": "Apple", 
        "description": "apple.png", 
        "weight": 0 
       } 
      ] 
     }, 
     { 
      "name": "Can you identify this color?", 
      "description": "#3d9ae8", 
      "answers": [ 
       { 
        "name": "Youtube", 
        "description": "youtube.png", 
        "weight": 0 
       }, 
       { 
        "name": "Dropbox", 
        "description": "dropbox.png", 
        "weight": 1 
       }, 
       { 
        "name": "Wordpress", 
        "description": "wordpress.png", 
        "weight": 0 
       } 
      ] 
     }, 
     { 
      "name": "Can you identify this color?", 
      "description": "#c4302b", 
      "answers": [ 
       { 
        "name": "Youtube", 
        "description": "youtube.png", 
        "weight": 1 
       }, 
       { 
        "name": "Twitter", 
        "description": "twitter.png", 
        "weight": 0 
       }, 
       { 
        "name": "Vimeo", 
        "description": "vimeo.png", 
        "weight": 0 
       } 
      ] 
     } 

    ] 
} 

mojego kodu PHP

<?php 
include '../config/config.php'; 
if(isset($_GET['sub_cat_id'])) 
{ 
     $sub_cat_id = $_GET['sub_cat_id']; 
     $result = mysql_query("select * from $questions where sub_cat='$sub_cat_id' order by level_fk asc"); 
     $json_response = array(); //Create an array 
     $i=1; 
         while ($row = mysql_fetch_array($result)) 
         { 
         $row_array['qus_pk'] = $row['qus_pk'];   
         $row_array['question'] = $row['question']; 
         $qus_pk = $row['qus_pk']; 


         $option_qry = mysql_query("select * from $qus_ans where qus_pk=$qus_pk"); 
         while ($opt_fet = mysql_fetch_array($option_qry)) 
         { 

         $row_array['options'] = $opt_fet['options']; 
         $row_array['right_ans'] = $opt_fet['right_ans']; 
         array_push($json_response,$row_array); //push the values in the array 
          }      


         $i++; 
         } 
     echo json_encode($json_response); 
} 

?> 

And My Wynik otrzymuję odpowiedzi JSON jak poniżej

[ 
    { 
     "qus_pk": "1", 
     "question": "Ten years ago, P was half of Q in age. If the ratio of their present ages is 3:4, what will be the total of their present ages?", 
     "options": "45", 
     "right_ans": "0" 
    }, 
    { 
     "qus_pk": "1", 
     "question": "Ten years ago, P was half of Q in age. If the ratio of their present ages is 3:4, what will be the total of their present ages?", 
     "options": "40", 
     "right_ans": "0" 
    }, 
    { 
     "qus_pk": "1", 
     "question": "Ten years ago, P was half of Q in age. If the ratio of their present ages is 3:4, what will be the total of their present ages?", 
     "options": "35", 
     "right_ans": "1" 
    }, 
    { 
     "qus_pk": "1", 
     "question": "Ten years ago, P was half of Q in age. If the ratio of their present ages is 3:4, what will be the total of their present ages?", 
     "options": "50", 
     "right_ans": "0" 
    }, 
    { 
     "qus_pk": "2", 
     "question": "Father is aged three times more than his son Sunil. After 8 years, he would be two and a half times of Sunil's age. After further 8 years, how many times would he be of Sunil's age?", 
     "options": "4 times", 
     "right_ans": "0" 
    }, 
    { 
     "qus_pk": "2", 
     "question": "Father is aged three times more than his son Sunil. After 8 years, he would be two and a half times of Sunil's age. After further 8 years, how many times would he be of Sunil's age?", 
     "options": "1 times", 
     "right_ans": "0" 
    }, 
    { 
     "qus_pk": "2", 
     "question": "Father is aged three times more than his son Sunil. After 8 years, he would be two and a half times of Sunil's age. After further 8 years, how many times would he be of Sunil's age?", 
     "options": "3 times", 
     "right_ans": "1" 
    }, 
    { 
     "qus_pk": "2", 
     "question": "Father is aged three times more than his son Sunil. After 8 years, he would be two and a half times of Sunil's age. After further 8 years, how many times would he be of Sunil's age?", 
     "options": "5 times", 
     "right_ans": "0" 
    } 
] 

W moim respose każdego czas pytanie powtarza się, jak uniknąć i jeśli chcę osiągnąć pierwszą strukturę json, w moim kodzie PHP co & gdzie muszę dokonać zmian ?. Jeśli ktokolwiek wie, pomóż mi.

Odpowiedz

13

Hi spróbować,

<?php 
include '../config/config.php'; 
if(isset($_GET['sub_cat_id'])) 
{ 
    $sub_cat_id = $_GET['sub_cat_id']; 
    $result = mysql_query("SELECT * FROM $questions WHERE sub_cat='$sub_cat_id' ORDER BY level_fk ASC"); 
    $json_response = array(); //Create an array 
    while ($row = mysql_fetch_array($result)) 
    { 
     $row_array = array(); 
     $row_array['qus_pk'] = $row['qus_pk'];   
     $row_array['question'] = $row['question']; 
     $row_array['answers'] = array(); 
     $qus_pk = $row['qus_pk']; 

     $option_qry = mysql_query("SELECT * FROM $qus_ans WHERE qus_pk=$qus_pk"); 
     while ($opt_fet = mysql_fetch_array($option_qry)) 
     { 
      $row_array['answers'][] = array(
       'options' => $opt_fet['options'], 
       'right_ans' => $opt_fet['right_ans'], 
      ); 

     } 
     array_push($json_response, $row_array); //push the values in the array 
    } 
    echo json_encode($json_response); 
} 
?>  
+0

ya, jego pracy w porządku .. dziękuję ... – Vetrivel

+4

zaakceptować to jeśli działa – Ohmen

+0

może ktoś proszę podać strukturę tabeli do uruchomienia tego kodu? czy możemy użyć tego dla konstrukcji Json drzewa D3? –

6

myślę, że ten kod jest łatwiej zorientować się, a przy okazji to używa mysqli ...

ta opiera się na mojej własnej struktury danych, jestem w środek czegoś i nie mam czasu na banknoty w celu dostosowania go do pytania, ale powinien łatwo zorientować się, jak dostosować ją do innych struktur:

$usersList_array =array(); 
$user_array = array(); 
$note_array = array(); 

$fetch_users = mysqli_query($mysqli, "SELECT 
     ID, 
     Surname, 
     Name 
    FROM tb_Users 
    WHERE Name LIKE 'G%' 
    ORDER BY ID") or die(mysqli_error($mysqli)); 
while ($row_users = mysqli_fetch_assoc($fetch_users)) { 
    $user_array['id'] = $row_users['ID']; 
    $user_array['surnameName'] = $row_users['Surname'].' '.$row_users['Name']; 
    $user_array['notes'] = array(); 

    $fetch_notes = mysqli_query($mysqli, "SELECT 
     id, 
     dateIns, 
     type, 
     content 
    FROM tb_Notes 
    WHERE fk_RefTable = 'tb_Users' AND 
     fk_RefID = ".$row_users['ID']."" 
    ) or die(mysqli_error($mysqli)); 
    while ($row_notes = mysqli_fetch_assoc($fetch_notes)) { 
     $note_array['id']=$row_notes['id']; 
     $note_array['dateIns']=$row_notes['dateIns']; 
     $note_array['type']=$row_notes['type']; 
     $note_array['content']=$row_notes['content']; 
     array_push($user_array['notes'],$note_array); 
    } 

    array_push($usersList_array,$user_array); 
} 

$jsonData = json_encode($usersList_array, JSON_PRETTY_PRINT); 


echo $jsonData; 

Wynikające JSON:

[ 
{ 
    "id": "1", 
    "surnameName": "Xyz Giorgio", 
    "notes": [ 
     { 
      "id": "1", 
      "dateIns": "2016-05-01 03:10:45", 
      "type": "warning", 
      "content": "warning test" 
     }, 
     { 
      "id": "2", 
      "dateIns": "2016-05-18 20:51:32", 
      "type": "error", 
      "content": "error test" 
     }, 
     { 
      "id": "3", 
      "dateIns": "2016-05-18 20:53:00", 
      "type": "info", 
      "content": "info test" 
     } 
    ] 
}, 
{ 
    "id": "2", 
    "cognomeNome": "Xyz Georg", 
    "notes": [ 
     { 
      "id": "4", 
      "dateIns": "2016-05-20 14:38:20", 
      "type": "warning", 
      "content": "georg warning" 
     }, 
     { 
      "id": "5", 
      "dateIns": "2016-05-20 14:38:20", 
      "type": "info", 
      "content": "georg info" 
     } 
    ] 
} 
] 
+0

Witamy w przepełnieniu stosu. Chociaż podany link może odpowiedzieć na pytanie, najlepiej umieścić istotne elementy rozwiązania bezpośrednio w odpowiedzi, jeśli strona z linkiem zniknie w przyszłości. – Kmeixner

+2

Dziękuję, pomyślałem, że wolałbym unikać powielania. Wpisuję kod :-) –

+0

Dziękuję. Świetna pomoc –