You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 19:20:32