从php mysql循环遍历json数据以获得javascript函数

时间:2018-09-08 23:28:51

标签: javascript php mysql json

我有一个来自php的json数据,它工作正常。 我现在想要的是,我希望我的json数据像下面的javascript函数中的代码一样。 我想迭代并获取类似数据,例如javascript代码中的对象。 我怎么得到的。

$json_array = array();

$sql = "SELECT id, instructions, quiz_question, correct, wrong, wrong1, wrong2 FROM student_quiz WHERE subject = 'SOCIAL STUDIES' AND type = 'challenge'";

$results = $pdo->query($sql);
$results->setFetchMode(PDO::FETCH_ASSOC);

while($row = $results->fetch()) {
    $json_array['quizlist'][] = $row ;
}

?>

    <script type='text/javascript'>



(function() {
  var questions = [{
    question: "What is 3*6?",
    choices: [3, 6, 9, 12, 18],
    correctAnswer: 4
  }, {
    question: "What is 8*9?",
    choices: [72, 99, 108, 134, 156],
    correctAnswer: 0
  }, {
    question: "What is 1*7?",
    choices: [4, 5, 6, 7, 8],
    correctAnswer: 3
  }, {
    question: "What is 8*8?",
    choices: [20, 30, 40, 50, 64],
    correctAnswer: 4
  }];

2 个答案:

答案 0 :(得分:1)

要从数据库数据输出JSON,最好在数据之间进行映射,如果其中之一无法进行更多调整和自定义。

要在PHP中输出映射的JSON数组,有一个函数json_encode()。在下面的示例中,shuffle()也已用于随机化选择。

// ...
$sql = "SELECT id, instructions, quiz_question, correct, wrong, wrong1, wrong2 FROM student_quiz WHERE subject = 'SOCIAL STUDIES' AND type = 'challenge'";

$results = $pdo->query($sql);
$results->setFetchMode(PDO::FETCH_ASSOC);

$json = [];

while($row = $results->fetch()) {
    $choices = [
        $row['correct'],
        $row['wrong'],
        $row['wrong1'],
        $row['wrong2'],
    ];

    // shuffle the current choices so the 1st item is not always obviously correct
    shuffle($choices);

    $json[] = [
        'question' => $row['question'],
        'choices' => $choices,
        'correctAnswer' => $row['correct'],
    ];
}

echo json_encode($json);

答案 1 :(得分:0)

好吧,您当前遇到的问题-可以说-“概念”。

首先让我们关心数据库:

您确实将任何类型的问题和答案存储在与实际行的相邻字段相同的表中。这可能很容易创建和处理,但这不是针对数据库的目的。 MySQL(或任何其他派生或类似数据库)旨在创建与另一个表的数据集的关系。这意味着查询的整体性能源于关系。稍后运行实际上连接同一表或修改查询范围的表内容的复杂查询时,会遇到性能问题。

建议以某种方式规范化您的实际数据库设计,该方式应能够在另外2个单独的表中分配问题的答案以及问题的答案和状态(从我的角度来看,这是最佳实践)。完成此操作后,您可以对这些表利用数据库服务器的维护机制。您可以将答案和答案状态的question_id字段的维护操作设置为“ ON DELETE CASCADE”,以确保在删除问题时,其他表的所有相应数据集也被删除。

要获取必需的知识,您可以投入一些时间并阅读以下几乎完整的SO条目:MySQL foreign key constraints, cascade delete

一旦获得有关数据库规范化的必需知识,您就可以决定如何定义构造的数组才能实现“ JSON表示形式的对象和数组的组合”。在创建组成数组的逻辑时,您可能要记住的一些事实是:

  • 当关联数组(在PHP中)包含字符串(非数字)键时,表示JSON中的对象。
  • 当数组(在PHP中)包含以0开头的连续顺序的整数键时,表示JSON中的数组。

在您的具体JS示例中,源数组可能基于包含整数索引数组的Array,该数组具有字符串索引。一旦理解了所有这些内容,您可能会得到正确的提示,以使用您的内容构建完全相同的数组。