【问题标题】:Loop through json data from php mysql to get javascript function [duplicate]循环从php mysql获取json数据以获取javascript函数[重复]
【发布时间】:2018-09-08 23:28:51
【问题描述】:

我有一个来自 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
  }];

【问题讨论】:

  • 你看json_encode函数了吗?

标签: javascript php mysql json


【解决方案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);

【讨论】:

    【解决方案2】:

    嗯,您当前的问题 - 可以说 - “概念”。

    首先让我们关心一下数据库:

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

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

    为了获得所需的知识,您可以花一些时间阅读这个几乎完整的 SO-Entry:MySQL foreign key constraints, cascade delete

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      相关资源
      最近更新 更多