【问题标题】:PHP get Array with sub Array from SQLPHP从SQL获取带有子数组的数组
【发布时间】:2023-03-14 11:40:01
【问题描述】:

我是编码新手,但我似乎无法理解这一点。非常感谢您提供一点帮助或提示。

基本上我想要一个带有问卷调查的数组,其中包含 id、name 和一个问题子数组。问题也由 id 和 name 组成。(1 Questionnaire 可以有多个问题) 我正在寻找这样的东西:

[{Questionnaires{id:x, name:x, questions:{id:x, name:x},{id:x2, name:x2}}]

这是我的查询

SELECT questionnaires.id QuestionnaireId, questionnaires.title QuestionnaireTitle, questions.id QuestionId, questions.text Question 
FROM questionnaires INNER JOIN questionnaireshasquestions qa ON qa.idQuestionnaire = questionnaires.id 
INNER JOIN questions ON questions.id = qa.idQuestion

还有我的 PHP 代码:

while ($row = $conn->fetch()) {
    
    if (!isset($data['questionnaires'][$row['QuestionnaireId']])) {
        
    $data['questionnaires'][] = array(
            'id' => $row['QuestionnaireId'],
            'title' => $row['QuestionnaireTitle'],
            'questions' => array(
                'id' => $row['QuestionId'],
                'text' => $row['Question']
            )
    ); 
    } else {
        $data['questionnaires'][$row['QuestionnaireId']][] = array(
           'questions' => array(
                'id' => $row['QuestionId'],
                'text' => $row['Question']
                )           
    );  
}

我得到的 JSON 数组格式错误/不正确:

{"questionnaires":[{"id":"1","title":"Are you hungry?","questions":{"id":"1","text":"How is your passion? "}},{"id":"1","title":"Are you hungry?","questions":{"id":"2","text":"Do you drink?"}},{"id":"2","title":"How are you feeling?","questions":{"id":"1","text":"How is your passion? "},"0":{"questions":{"id":"3","text":"Do you like fish?"}}},{"id":"5","title":"Is testing working?","questions":{"id":"4","text":"How is the testing?"}}]

如您所见,它对...内的每个问题重复相同的问卷调查

我希望我能很好地解释我在这里要做的事情:)

【问题讨论】:

  • 什么问题,什么不工作?
  • 我更新了问题。 JSON数组的格式不是我想要的……怎么才能得到我上面描述的格式呢?
  • “类似这样的东西”——我不明白这应该是什么。它既不是 PHP 数组也不是 JSON 数组。首先,问问自己数据结构的 PHP 表示应该是什么。

标签: php arrays


【解决方案1】:

你的收集方法有点“坏”。

这应该可行:

while ($row = $conn->fetch()) {
    $id = $row['QuestionnaireId'];
    if (!isset($data['questionnaires'][$id])) {
        // First time we get this "QuestionnaireId" - 
        // define "container" that collects the related questions.  
        $data['questionnaires'][$id] = [
            'id'        => $row['QuestionnaireId'],
            'title'     => $row['QuestionnaireTitle'],
            'questions' => [],
        ];
    } else {
        // Already got this "container" -
        // put the question into the collection.
        $data['questionnaires'][$id]['questions'][] = [
            'id'   => $row['QuestionId'],
            'text' => $row['Question']
        ];
    }
}

【讨论】:

  • 超级!它接近了。我会尝试调整它。但是现在这给出了以下结果:{"questionnaires":{"1":{"id":"1","title":"Are you hungry?","questions":[{"id":"2","text":"Do you drink?"}]},"2":{"id":"2","title":"How are you feeling?","questions":[{"id":"3","text":"Do you like fish?"}]},"5":{"id":"5","title":"Is testing working?","questions":[]}},"status":true,"message":"Succefully got questionnaires!!!"} 如您所见,它没有得到所有问题,只有最后一个问题。对于最后一份问卷,它根本没有得到问题(因为他们只有一个问题)
猜你喜欢
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
  • 2016-12-28
  • 2021-03-17
  • 2017-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多