php - how to make array of array by looping result from a query -


i have survey games, , have 1 table games data, , people's answers.

i want output array in json format answers each of 3 favorite games name , year in array of array.

expected output

[     {     "id": "1",     "username": "userx",     "g1": {"name": "game1", "year": "1991"},     "g2": {"name": "game2", "year": "1992"},     "g3": {"name": "game3", "year": "1993"},     } ] 

what i've tried

$sql = "select * tbanswers answer inner join tbgames game on answer.g1 = game.id";  try {     $db = new db();     $db = $db->connect();     $stmt = $db->prepare($sql);      $stmt->execute();      $answer = $stmt->fetchall(pdo::fetch_obj);      $db = null;      if(empty($answer)) {         $response->getbody()->write         ('         {             "error":             {                 "status":"400",                 "message":"invalid request"             }         }');     } else {         $response->getbody()->write(json_encode($answer));     } } catch(pdoexception $e) {     $response->getbody()->write     ('     {         "error":         {             "message":'. $e->getmessage() .'         }     }'); } 

the current output

[     {     "id": "1",     "username": "userx",     "name": "game1",     "year": "1991"     } ] 

i think should foreach somewhere in else go through each game , echo result of based on id answers, not sure how apply

  1. where place foreach
  2. how select , results based on each game id
  3. how in json format

i'm sure it's not how doing it, how trying echo data in else

echo"["; echo"\n{"; echo"\n"; echo '"id:"'.' "'.$answer[0]->id.'",'; echo"\n"; echo"}\n"; echo"]"; 

here tables structure

tbgames

    id   ,  name    ,  year      1   , 'game1'  , '1991'      2   , 'game2'  , '1992'      3   , 'game3'  , '1993'      4   , 'game4'  , '1994' 

tbanswers

   id   ,    name    ,    g1    ,   g2    ,   g3     1   ,    userx   ,    1     ,   2     ,    3       2   ,    usery   ,    3     ,   1     ,    4     3   ,    userz   ,    1     ,   1     ,    2     4   ,    userw   ,    2     ,   3     ,    4 

using query:

$sql = "select answer.id a_id, answer.name a_name, game1.id g1_id, game1.name g1_name, game1.year g1_year, game2.id g2_id, game2.name g2_name, game2.year g2_year, game3.id g3_id, game3.name g3_name, game3.year g3_year tbanswers answer inner join tbgames game1 on answer.g1 = game1.id inner join tbgames game2 on answer.g2 = game2.id inner join tbgames game3 on answer.g3 = game3.id"; 

you should change else statement content to:

} else {     foreach($answer $value) {         $array_resp[]=[             'id' => $value->a_id,             'username' => $value->a_name,             'g1' => ['name'=>$value->g1_name, 'year'=>$value->g1_year],             'g2' => ['name'=>$value->g2_name, 'year'=>$value->g2_year],             'g3' => ['name'=>$value->g3_name, 'year'=>$value->g3_year],             ];     }     $response->getbody()->write(json_encode($array_resp)); } 

Comments

Popular posts from this blog

What is happening when Matlab is starting a "parallel pool"? -

angular - DownloadURL return null in below code -

php - Cannot override Laravel Spark authentication with own implementation -