0

我正在为一门大学课程做一个简短的回答测验。基本上学生必须输入答案/关键词。我preg_match_all()用来做字符串比较(用户回答和数据库中的回答)。我正在尝试一个单词的答案,结果还可以,但是在提交短语时出现了问题。

    if(preg_match_all("/". $ans[$arr_ind]. "/i", " . $atext[$arr_ind] . ")){
            echo "<p align='justify'><img src='image/mark.png' border='0' width='20' height='20'></img><b> YOUR ANSWER: </b>". $ans[$arr_ind]. "</p>";
            $total = $total + 1;
            $correct = 1;
    }
    else
            echo "<p align='justify'><img src='image/cross.png' border='0' width='20' height='20'></img> <b>YOUR ANSWER: </b>". $ans[$arr_ind]. "</p>";

例如:

提交的答案:硬件、软件

数据库中的答案:

  1. 硬件:通过执行指令处理数据;提供输入和输出。
  2. 软件:系统执行的指令。
  3. 数据:事实和观察的基本表示;原始事实。
  4. 通信:在不同系统之间共享数据和处理;通信通道、接口硬件和软件。

该函数将其评估为错误答案。我已经查找了正则表达式,但不认为这是为了这个。任何帮助将不胜感激。谢谢。

阿提卡

4

1 回答 1

1

您始终可以将答案拆分为各个部分并运行检查:

$answers = explode(",", $ans[$arr_ind]);
foreach ($answers as $answer) {
    $answer = trim($answer);
    if (stripos($atext[$arr_ind], $answer) !== false)
        // correct
    else
        // incorrect
}

我也回答了你之前的问题,我认为发布的答案进入$ans[]对吗?这就是第一行中引用的内容,但根据需要切换数组。

stripos将与您的 *preg_match* 做同样的事情,但语法更友好,执行速度更快。

于 2013-04-25T01:54:07.310 回答