PHP构造方法返回数组问题:单题多答案仅返回一个的解决求助
问题解决思路
核心问题分析
你当前的代码每次循环都会用新的questions对象覆盖同一个questionID的条目,且answers方法每次都会重置数组,导致最终每个题目仅保留最后一条答案。另外,JOIN查询返回多条同一题目的记录是正常现象,需要在PHP层面完成答案的合并。
解决方案
1. 调整questions类的结构
修改类的逻辑,让它能正确存储多个答案:
class questions { public $question; public $feedback; public $mark; public $questionTypeID; public $answers = []; // 初始化空的答案数组 public function __construct($question, $feedback, $mark, $questionTypeID) { $this->question = $question; $this->feedback = $feedback; $this->mark = $mark; $this->questionTypeID = $questionTypeID; } // 添加单个答案的方法 public function addAnswer($answer) { $this->answers[] = $answer; } }
2. 修改循环逻辑,合并同一题目的答案
遍历查询结果时,先判断题目是否已存在于数组中:存在则追加答案,不存在则新建对象:
include("connect-database.inc.php"); $question_query = "SELECT questions.questionID, answers.answer, questions.question, questions.feedback, questions.mark, questions.questionTypeID FROM questions JOIN answers ON questions.questionID=answers.questionID"; $questionList=array(); try { $mysqliResult = $link->query($question_query); while($var=$mysqliResult->fetch_assoc()){ $qid = $var['questionID']; // 题目不存在时新建对象 if(!isset($questionList[$qid])){ $questionList[$qid] = new questions( $var['question'], $var['feedback'], $var['mark'], $var['questionTypeID'] ); } // 追加当前答案到对应题目 $questionList[$qid]->addAnswer($var['answer']); } } catch (Exception $e) { echo "MySQLi Error Code: " . $e->getCode() . "<br />"; echo "Exception Msg: " . $e->getMessage(); exit(); } var_dump($questionList);
3. 是否需要创建Answer类?
- 如果答案仅包含文本内容,用字符串数组完全足够,不需要额外创建类。
- 如果答案还有其他属性(比如
answerID、是否正确等),创建Answer类会让代码结构更清晰,便于后续扩展。示例如下:
class Answer { public $id; public $content; public $isCorrect; public function __construct($id, $content, $isCorrect) { $this->id = $id; $this->content = $content; $this->isCorrect = $isCorrect; } } // 对应添加答案的逻辑改为: $questionList[$qid]->addAnswer(new Answer( $var['answerID'], $var['answer'], $var['isCorrect'] ));
内容的提问来源于stack exchange,提问作者musnn
相关产品推荐
相关产品推荐

