比较不是精确匹配的字符串


Compare String that Aren't Exact Match

我在做一门大学课程的简短答案测试。基本上,学生必须输入答案/关键词。我使用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. 通信:在不同系统之间共享数据和处理;通信通道、接口硬件和软件。

函数将其评估为不正确答案。我查过正则表达式,但不认为它适合这个。任何帮助都将非常感激。谢谢。

Atikah

您可以将答案分成各个部分并运行检查:

$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*相同的事情,具有更友好的语法和更快的执行速度。