首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP竞赛逻辑

PHP竞赛逻辑
EN

Stack Overflow用户
提问于 2011-12-19 21:35:21
回答 3查看 97关注 0票数 0

在我在php中的一个web应用程序中,有一个竞赛部分。它包含10个选择题,每个问题有4个选项。

在用户填写表单后,我将把答案保存为逗号分隔的值,放在db中。如下:

代码语言:javascript
复制
user   |    answer
-------------------------------------
112    |  1,7,8,9,8,5,2,3,6,7,9,6

我得到的答案键与使用的填充答案键相同..

评估用户输入和找出得分最高的用户的最佳逻辑方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-19 21:43:43

正如注释中提到的,这不是存储数据的最佳方式,但我会这样评估:

代码语言:javascript
复制
$query = mysql_query("select * from `table` where 1",CONNECTION_IDENTIFIER) or die("die message");
 $answer_key = array(answer1,answer2,etc);
 $high_score = 0;
 $high_scorer= "";
 while($r=mysql_fetch_array($query)){
    $users_answers = explode(',',$r['answer']);
    $user_score = 0;
    for($i=0;$i<10;$i++){
        if ($answer_key[$i]==$users_answers[$i]){
            $user_score++;
        }
    }
     if ($user_score > $high_score){
            $high_score =  $user_score;
            $high_scorer = $r['user'];
     }
 }

 echo "High scorer is $high_scorer with $high_score points";
票数 1
EN

Stack Overflow用户

发布于 2011-12-19 21:44:34

如果你有这样的答案:

$answersRating =数组(1 => 0,2=> 1,3 => 3,4 => 2,.)在选择答案1时,他得到0分,2 => 1分,3 => 3分等等。你可以这样做:

代码语言:javascript
复制
$score = array_sum(array_intersect_key($answersRating, array_flip(explode(',', $userAnswersStringFromDB))));
票数 1
EN

Stack Overflow用户

发布于 2011-12-19 22:00:08

我认为您应该这样构造您的数据库:注意:这是最低限度的,您当然会在诸如名称、描述等问题中添加额外的字段。

代码语言:javascript
复制
answers   | id, user_id, question_id, answer
questions | id, contest_id, correct_answer
user      | id, name

然后您就可以通过查询获得所有信息。

最高分:

代码语言:javascript
复制
SELECT u.name,count(*) as Score FROM user u, answers a, questions q WHERE u.id=a.user_id and q.id = a.question_id and q.correct_answer=a.answer WHERE q.contest_id=XXX ORDER BY Score
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8567862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档