加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – mysql返回多级数组

发布时间:2020-12-13 17:20:49 所属栏目:PHP教程 来源:网络整理
导读:我正在使用三个与 PHP应用程序相关的MySQL表.有些测试有很多问题,问题有很多答案.我想做的是循环数据如下: foreach($tests as $test){ echo $test-testName; foreach($test-questions as $question) { echo $question-questionText; foreach($question-answ
我正在使用三个与 PHP应用程序相关的MySQL表.有些测试有很多问题,问题有很多答案.我想做的是循环数据如下:

foreach($tests as $test)
{
    echo $test->testName;

    foreach($test->questions as $question)
    {
        echo $question->questionText;

        foreach($question->answers as $answer)
        {
            echo $answer->answerText;
        }
    }
}

我想知道的是MySQL查询和PHP代码将以这种方式循环遍历它?

编辑MySQL无法返回这样的数组,我应该说的是MySQL PHP代码的样子.

为清楚起见,表格是测试,问题和答案.问题表包含test_id列,答案包含question_id

谢谢!

我想要回来的结构将是:

array(
    'testName' = 'Test name string','questions' = array(
        array(
            'questionId' = 1,'questionText' = 'Question string','answers' = array(
                array(
                    'answerId' = 1,'answerText' = 'Answer string'
                ),array(
                    'answerId' = 2,'answerText' = 'Answer string'
                )
            )
        )
    )
);

编辑

我目前的实现如下,我想要做的是急切加载数据而不是执行如此多的查询

$tests = getTests();

foreach($tests as $test){

    $questions = getQuestions($test->id);

    foreach($questions as $question){

        $answers = getAnswers($question->id);

        foreach($answers as $answer){

            // do answer things

        }

    }

}

解决方法

$mysqli = new mysqli("localhost","my_user","my_password","world");


$query = "SELECT testname,question,answer
    FROM tests 
    JOIN questions ON (tests.id = question.test_id)
    JOIN answers ON (questions.id = answers.id)
    WHERE 'your condition'
    ORDER BY tests.id,question.id"

$result = $mysqli->query($query);

您可以使用in_array函数来获得所需的结果(您可以生成数组或打印结果).以下是打印值的示例. (你可以使用id代替名称来改善)

$tests_arr = array();
$questions_arr = array();

while( $row = $result->fetch_array(MYSQLI_ASSOC) )
{
    if(!in_array($row['testname'],$test_arr)
    {
        $test_arr[] = $row['testname'];
        echo $row['testname'];
    }

    if(!in_array($result['question'],$question_arr))
    {
        $questions_arr[] = $row['question'];
        echo $row['question'];
    }

    echo $row['answer'];
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读