2011-04-14 5 views
0

질문에 대한 답변을 배열에 맞게 이동하거나 원하는 효과를 SQL 쿼리하는 방법? 며칠 동안이 알레르기에 질 렸습니다.배열 연산

<?php 
    public function getQuestions() 
    { 
     $sql = 'SELECT * FROM questions'; 
     $result = Database::query($sql); 
     while ($row = mysql_fetch_assoc($result)) { 
      $questions[] = $row; 
     } 
     return $questions; 
    } 

    public function getAnswers($qid) 
    { 
     $sql = 'SELECT idq, answer, truth FROM answers WHERE idq = '.$qid; 
     $result = Database::query($sql); 
     while ($row = mysql_fetch_assoc($result)) 
     { 
      $answers[] = $row; 
     } 
     return $answers; 
    } 

    public static function array_add($a1, $a2) 
    { 
     $aRes = $a1; 
     foreach (array_slice(func_get_args(), 1) as $aRay) 
     { 
      foreach (array_intersect_key($aRay, $aRes) as $key => $val) $aRes[$key] += $val; 
      $aRes += $aRay; 
     } 
     return $aRes; 
    } 


    public static function getQuiz() 
    { 
     $db = new Database(); 
     self::$questions = $db->getQuestions(); 
     foreach(self::$questions as $q) 
     { 
      $qid = $q['qid']; 

      self::$answers[$qid] = $db->getAnswers($qid); 
     } 

     $s = Quiz::array_add(self::$questions, self::$answers); 
     print "<pre>"; 
     print_r($s); 
     print "</pre>"; 
    } 
?> 

출력 :

Array 
(
    [0] => Array 
     (
      [qid] => 1 
      [question] => Bunty szlachty pod has?ami obrony praw nazywamy? 
     ) 

    [1] => Array 
     (
      [qid] => 2 
      [question] => Kto dowodzi? wojskami kozackimi podczas powstania Chmielnickiego? 
      [0] => Array 
       (
        [idq] => 1 
        [answer] => liberum veto 
        [truth] => 1 
       ) 

      [1] => Array 
       (
        [idq] => 1 
        [answer] => jurydyki 
        [truth] => 0 
       ) 

      [2] => Array 
       (
        [idq] => 1 
        [answer] => rokosze 
        [truth] => 0 
       ) 

     ) 

    [2] => Array 
     (
      [qid] => 3 
      [question] => W którym roku odby?a si?, morska, bitwa pod Oliw?? 
      [0] => Array 
       (
        [idq] => 2 
        [answer] => Bohdan Chmielnicki 
        [truth] => 1 
       ) 

      [1] => Array 
       (
        [idq] => 2 
        [answer] => Gustaw II Adolf 
        [truth] => 0 
       ) 

      [2] => Array 
       (
        [idq] => 2 
        [answer] => Iwan IV Gro?ny 
        [truth] => 0 
       ) 

     ) 

    [3] => Array 
     (
      [0] => Array 
       (
        [idq] => 3 
        [answer] => 1627 
        [truth] => 1 
       ) 

      [1] => Array 
       (
        [idq] => 3 
        [answer] => 1608 
        [truth] => 0 
       ) 

      [2] => Array 
       (
        [idq] => 3 
        [answer] => 1654 
        [truth] => 0 
       ) 

     ) 

) 

나는 아직이 솔루션을 시도하지만 개별적으로 답변을해야합니다

function get_quiz() 
{ 
    $sql = 'SELECT question, GROUP_CONCAT(answer ORDER BY answer SEPARAtoR " ") as answers 
      FROM questions 
      LEFT JOIN answers ON (questions.qid=answers.idq) 
      GROUP BY answers.idq;'; 
    $result = mysql_query($sql); 
    while ($row = mysql_fetch_assoc($result)) 
    { 
     $quiz[] = $row; 
    } 
    return $quiz; 
} 

출력 :

Array 
(
    [0] => Array 
     (
      [question] => Bunty szlachty pod has?ami obrony praw nazywamy? 
      [answers] => jurydyki liberum veto rokosze 
     ) 

    [1] => Array 
     (
      [question] => Kto dowodzi? wojskami kozackimi podczas powstania Chmielnickiego? 
      [answers] => Bohdan Chmielnicki Gustaw II Adolf Iwan IV Gro?ny 
     ) 

    [2] => Array 
     (
      [question] => W którym roku odby?a si?, morska, bitwa pod Oliw?? 
      [answers] => 1608 1627 1654 
     ) 

) 
+1

당신이 배열의 구조를 설명 할 수 당신은 결국 얻을 필요가? – Nemoden

답변

3

문제는이 라인 :

 self::$answers[$qid] = $db->getAnswers($qid); 

ID와 질문은 "1"1

하나 명의 잠재적 인 수정으로 해제 끝날 것 때문에 배열의 0 번째 위치에 대한 답변을 모두 넣어되고 변경하는 것입니다 :

foreach(self::$questions as $q) 
    { 
     $qid = $q['qid']; 
     self::$answers[$qid] = $db->getAnswers($qid); 
    } 

에 :

foreach(self::$questions as $idx=>$q) 
    { 
     $qid = $q['qid']; 
     self::$answers[$idx] = $db->getAnswers($qid); 
    } 
+0

SUPER 정말 고마워요! – luzny