2016-09-13 8 views
0

私はアンケート、回答、ユーザーのテーブルを持っています。回答と調査テーブルはuser_idでリンクされており、surveyはuser_idとリンクしています。PHPで配列を別の配列に表示するには?

アンケートの回答とユーザーとコメントを表示します。コメントは調査表の中にあります。

私はこの形式で結果を取得したい:

{ 
    result:1, 
    message:'success', 
    survey:[ 
    { 
     answers: 
     [ 

     ], 
     user: 
     { 

     } 
     comment: 
    }, 
    { 
     answers: 
     [ 

     ], 
     user: 
     { 

     } 
     comment: 
    } 
    ] 
} 

getAllSurveyByDoctor機能:

function getAllSurveyByDoctor($user_id) 
    { 
     $database = new SurveyDatabase(SurveyConstants::DBHOST,SurveyConstants::DBUSER,SurveyConstants::DBPASS,SurveyConstants::DBNAME); 
     $dbConnection = $database->getDB(); 

     $stmt = $dbConnection->prepare("SELECT * from survey where `user_id` = ?"); 
     $stmt->execute(array($user_id)); 
     $survey = $stmt->fetchAll(PDO::FETCH_ASSOC); 

     $surveys = array(); 
     $answers = array(); 

     if (count($survey) > 0) { 

      foreach($survey as $row) 
      { 

       $stmt = $dbConnection->prepare("SELECT answer.answer_id, answer.survey_id, answer.question_id, answer.rating, answer.user_id, question.question_id, question.question, question.type FROM `answer` INNER JOIN `question` ON 
answer.question_id = question.question_id WHERE answer.user_id = ? and answer.survey_id = ?"); 

       $s_id = $row['survey_id']; 

       $stmt->execute(array($user_id,$s_id)); 
       $answer = $stmt->fetchAll(PDO::FETCH_ASSOC); 

       $stmt = $dbConnection->prepare("SELECT users.user_id,users.email_id,users.pass,users.address,users.name,survey.survey_id,survey.user_id FROM `users` INNER JOIN `survey` ON users.user_id = survey.user_id WHERE users.user_id = ?"); 

       $stmt->execute(array($user_id)); 
       $user = $stmt->fetch(PDO::FETCH_ASSOC); 

       $comment = $row['comment']; 

      // $surveys[] = $row; 
       $answers = $answer; 
       $surveys[] = $answers; 
       $surveys[] = $user; 
       $surveys[] = $comment; 
      } 

      $response = array("status" => 1, "message" => "Success", "surveys" => $surveys); 
      return json_encode($response); 
     } 

     else { 
      $response = array("status"=>-1,"message"=>"surveys list is empty"); 
      return json_encode($response); 
     } 
    } 

私は結果はこのように取得:

{ 
    "status": 1, 
    "message": "Success", 
    "surveys": [ 
    [ 
     { 
     "answer_id": "50", 
     "survey_id": "35", 
     "question_id": "1", 
     "rating": "4", 
     "user_id": "9", 
     "question": "Scheduling appointments", 
     "type": "rating" 
     }, 
     { 
     "answer_id": "51", 
     "survey_id": "35", 
     "question_id": "2", 
     "rating": "6", 
     "user_id": "9", 
     "question": "Office environment", 
     "type": "rating" 
     } 
    ], 
    { 
     "user_id": "9", 
     "email_id": "[email protected]", 
     "pass": "user7", 
     "address": "miraroad", 
     "name": "user7", 
     "survey_id": "35" 
    }, 
    "0", 
    [], 
    { 
     "user_id": "9", 
     "email_id": "[email protected]", 
     "pass": "user7", 
     "address": "miraroad", 
     "name": "user7", 
     "survey_id": "35" 
    }, 
    "0", 
    [ 
     { 
     "answer_id": "54", 
     "survey_id": "37", 
     "question_id": "1", 
     "rating": "4", 
     "user_id": "9", 
     "question": "Scheduling appointments", 
     "type": "rating" 
     }, 
     { 
     "answer_id": "55", 
     "survey_id": "37", 
     "question_id": "2", 
     "rating": "6", 
     "user_id": "9", 
     "question": "Office environment", 
     "type": "rating" 
     } 
    ], 
    { 
     "user_id": "9", 
     "email_id": "[email protected]", 
     "pass": "user7", 
     "address": "miraroad", 
     "name": "user7", 
     "survey_id": "35" 
    }, 
    "0", 
    [], 
    { 
     "user_id": "9", 
     "email_id": "[email protected]", 
     "pass": "user7", 
     "address": "miraroad", 
     "name": "user7", 
     "survey_id": "35" 
    }, 
    "csdcs", 
    [ 
     { 
     "answer_id": "72", 
     "survey_id": "49", 
     "question_id": "7", 
     "rating": "5", 
     "user_id": "9", 
     "question": "Doctor listens and answers questions", 
     "type": "rating" 
     }, 
     { 
     "answer_id": "73", 
     "survey_id": "49", 
     "question_id": "6", 
     "rating": "5", 
     "user_id": "9", 
     "question": "Doctor explains medical condition(s)", 
     "type": "rating" 
     } 
    ], 
    { 
     "user_id": "9", 
     "email_id": "[email protected]", 
     "pass": "user7", 
     "address": "miraroad", 
     "name": "user7", 
     "survey_id": "35" 
    }, 
    "", 
    [ 
     { 
     "answer_id": "74", 
     "survey_id": "50", 
     "question_id": "8", 
     "rating": "5", 
     "user_id": "9", 
     "question": "Doctor spends enough time with patients", 
     "type": "rating" 
     }, 
     { 
     "answer_id": "75", 
     "survey_id": "50", 
     "question_id": "3", 
     "rating": "5", 
     "user_id": "9", 
     "question": "Staff helpfulness", 
     "type": "rating" 
     } 
    ], 
    { 
     "user_id": "9", 
     "email_id": "[email protected]", 
     "pass": "user7", 
     "address": "miraroad", 
     "name": "user7", 
     "survey_id": "35" 
    }, 
    "", 
    [ 
     { 
     "answer_id": "76", 
     "survey_id": "51", 
     "question_id": "7", 
     "rating": "5", 
     "user_id": "9", 
     "question": "Doctor listens and answers questions", 
     "type": "rating" 
     }, 
     { 
     "answer_id": "77", 
     "survey_id": "51", 
     "question_id": "6", 
     "rating": "5", 
     "user_id": "9", 
     "question": "Doctor explains medical condition(s)", 
     "type": "rating" 
     } 
    ], 
    { 
     "user_id": "9", 
     "email_id": "[email protected]", 
     "pass": "user7", 
     "address": "miraroad", 
     "name": "user7", 
     "survey_id": "35" 
    }, 
    "", 
    [ 
     { 
     "answer_id": "78", 
     "survey_id": "52", 
     "question_id": "8", 
     "rating": "5", 
     "user_id": "9", 
     "question": "Doctor spends enough time with patients", 
     "type": "rating" 
     }, 
     { 
     "answer_id": "79", 
     "survey_id": "52", 
     "question_id": "5", 
     "rating": "5", 
     "user_id": "9", 
     "question": "Trust in doctor's decision", 
     "type": "rating" 
     } 
    ], 
    { 
     "user_id": "9", 
     "email_id": "[email protected]", 
     "pass": "user7", 
     "address": "miraroad", 
     "name": "user7", 
     "survey_id": "35" 
    }, 
    "", 
    [ 
     { 
     "answer_id": "80", 
     "survey_id": "53", 
     "question_id": "1", 
     "rating": "5", 
     "user_id": "9", 
     "question": "Scheduling appointments", 
     "type": "rating" 
     }, 
     { 
     "answer_id": "81", 
     "survey_id": "53", 
     "question_id": "7", 
     "rating": "5", 
     "user_id": "9", 
     "question": "Doctor listens and answers questions", 
     "type": "rating" 
     } 
    ], 
    { 
     "user_id": "9", 
     "email_id": "[email protected]", 
     "pass": "user7", 
     "address": "miraroad", 
     "name": "user7", 
     "survey_id": "35" 
    }, 
    "", 
    [ 
     { 
     "answer_id": "82", 
     "survey_id": "54", 
     "question_id": "6", 
     "rating": "5", 
     "user_id": "9", 
     "question": "Doctor explains medical condition(s)", 
     "type": "rating" 
     }, 
     { 
     "answer_id": "83", 
     "survey_id": "54", 
     "question_id": "3", 
     "rating": "5", 
     "user_id": "9", 
     "question": "Staff helpfulness", 
     "type": "rating" 
     } 
    ], 
    { 
     "user_id": "9", 
     "email_id": "[email protected]", 
     "pass": "user7", 
     "address": "miraroad", 
     "name": "user7", 
     "survey_id": "35" 
    }, 
    "" 
    ] 
} 

私はいくつかの何を取得しています私が望むのと同じフォーマット。私は答えの配列、ユーザーとその後のコメントを得ています。しかし私はそれをどのように名付けることができますか?この結果から、回答、ユーザー、コメントはどこにあるのか特定できません。私はそれに名前をつけたい。どうやって?ありがとうございました。

+0

$ surveys [] =配列に新しい値を順番に追加するだけです。名前を付ける場合。キーカウンターを使用してください。 $ surveys [$ i] ['user_id'] = $ user、$ survey [$ i] ['comment'] = $ commentのようになります。カウンターを増やしてください。 –

+0

Alexisのソリューションも同様に機能します。カウンターの必要なしにそれを行う方法。 –

答えて

3

各調査ごとに連想配列を作成できます。この連想配列の中で、あなたのキーとあなたの値を割り当てます。それはどのように見えるのです:

function getAllSurveyByDoctor($user_id) 
    { 
     $database = new SurveyDatabase(SurveyConstants::DBHOST,SurveyConstants::DBUSER,SurveyConstants::DBPASS,SurveyConstants::DBNAME); 
     $dbConnection = $database->getDB(); 

     $stmt = $dbConnection->prepare("SELECT * from survey where `user_id` = ?"); 
     $stmt->execute(array($user_id)); 
     $survey = $stmt->fetchAll(PDO::FETCH_ASSOC); 

     $surveys = array(); 
     $answers = array(); 

     if (count($survey) > 0) { 

      foreach($survey as $row) 
      { 

       $stmt = $dbConnection->prepare("SELECT answer.answer_id, answer.survey_id, answer.question_id, answer.rating, answer.user_id, question.question_id, question.question, question.type FROM `answer` INNER JOIN `question` ON 
answer.question_id = question.question_id WHERE answer.user_id = ? and answer.survey_id = ?"); 

       $s_id = $row['survey_id']; 

       $stmt->execute(array($user_id,$s_id)); 
       $answer = $stmt->fetchAll(PDO::FETCH_ASSOC); 

       $stmt = $dbConnection->prepare("SELECT users.user_id,users.email_id,users.pass,users.address,users.name,survey.survey_id,survey.user_id FROM `users` INNER JOIN `survey` ON users.user_id = survey.user_id WHERE users.user_id = ?"); 

       $stmt->execute(array($user_id)); 
       $user = $stmt->fetch(PDO::FETCH_ASSOC); 

       $comment = $row['comment']; 

      // $surveys[] = $row; 

       //We create the "survey" associative array 
       $survey = []; 
       $answers = $answer; 
       $survey['answers']= $answers; 
       $survey['user'] = $user; 
       $survey['comment']=$comment; 
       //We add the survey array to the survey 
       $surveys[] = $survey; 
      } 

      $response = array("status" => 1, "message" => "Success", "surveys" => $surveys); 
      return json_encode($response); 
     } 

     else { 
      $response = array("status"=>-1,"message"=>"surveys list is empty"); 
      return json_encode($response); 
     } 
    } 
+0

はいそれを得ました..ありがとうございました.. @AlexisCôté – Sid

+0

ようこそ@Sid –

関連する問題