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
}

以前の質問にも答えましたが、POST された回答は$ans[]に入ると思いますよね?それが最初の行で参照されているものですが、必要に応じて配列を切り替えます。

striposは *preg_match* と同じことを行いますが、構文が少し使いやすくなり、実行が高速になります。

于 2013-04-25T01:54:07.310 に答える