【问题标题】:How to compare array with database in php如何在php中将数组与数据库进行比较
【发布时间】:2011-09-14 12:00:17
【问题描述】:

如果你们能帮我解决这个问题。我正在尝试用 php 构建一个 questionere。

表:

id_quiz   question    answer
82         q1            1 
83         q2            4 
84         q3            1
85         q4            4 

我有两个数组;
1. $all_ids = [82,83,84,85]
2. $all_answers = [1,4,1,4] -> 如果答案正确,则计算它们。

我的问题是如何将这两个数组与数据库进行比较

  1. '$all_ids' 是数据库表的 id。
  2. '$all_answers' 是答案。

$all_ids[82] ==($all_answer[1] -> 将答案与 id 82 的数据库进行比较)
$all_ids[83] == ($all_answer[4] -> 将答案与 id 83 的数据库进行比较)
$all_ids[84] == ($all_answer[1] -> 将答案与 id 84 的数据库进行比较)

我当前的代码似乎不起作用:

$total_correct = 0;

foreach ($all_ids as $ids){

    $check = $db->query("SELECT * FROM quiz WHERE id_quiz='$ids' ");
    $row = $check->fetch_assoc();

    foreach($all_answers as $answers) {

        if($row['answer'] == $answers) {
            $total_correct++;   
        }       

    }
}

我希望我的问题有意义:)

【问题讨论】:

  • 我有点困惑。当您不需要时,您会一遍又一遍地查询数据库。您应该能够获取整个表并从中创建一个数组。然后遍历 ids 检查答案。您可以做的另一件事是构建查询以包含您需要的所有问题,因此您只需查询一次,然后可能使用 php array_diff 比较数组。
  • 查询数据库一次。 SELECT * FROM quiz WHERE id_quiz IN (1,2,3,4) ($all_ids) 并遍历结果,就像马特解释的那样。
  • @cularis:我有点困惑为什么你的 cmets 没有答案。 :)
  • @cularis 谢谢。有点困惑。你能写下简短的答案吗:)。不太明白你的意思
  • 把表定义给我们,我给你写php/sql

标签: php mysql arrays foreach


【解决方案1】:

将您的两个答案数组更改为一个,如下所示:

$answers[82] = 1
$answers[83] = 4

foreach($answers as $id => $ans)
{
$sql = "select * from quiz where id_quiz = $id"
db->query($sql)
$row = $check->fetch_assoc();
if($row['answer'] == $ans)
{
  totalcorrect++
}

}

这是一个快速的答案,不确定您是否需要更多详细信息?

【讨论】:

  • 非常感谢:)。但是如何将这两个数组 $all_ids = [82,83,84,85], $all_answers = [1,4,1,4] 拆分为 $ids[82] = 1 ? ?还是我需要将它们合并在一起??
  • 谢谢 :) 我把它整理出来了。我使用了 array_combine.. 谢谢你的想法 .. appriciated ;)
  • 没问题,抱歉直到现在才看到评论!
【解决方案2】:

使用 php 的 implode 函数将 ID 粘合在一起:implode(",", $all_ids); 然后您可以使用它来创建一个数据库查询(如 cularis 所说)并遍历这些结果以进行检查(如 matt 所说)

更多信息:

【讨论】:

  • 所以我尝试了:'$check = $db->query("SELECT * FROM quiz WHERE id_quiz IN ($all_ids)");'并使用'while循环'??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多