2013-04-25 55 views
0

我正在爲uni課程做簡短的答案測驗。基本上,學生必須輸入答案/關鍵字。我使用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. 軟件:由系統執行的指令。數據:事實和觀察的基本表示;原始事實。通訊:在不同系統之間共享數據和處理;通信通道,接口硬件和軟件。

該函數評估爲不正確答案。我查了正則表達式,但不認爲這是爲了這個。任何幫助將不勝感激。謝謝。

Atikah

+0

然後,你應該將答案標記爲單個單詞並與其匹配。 – 2013-04-25 01:56:35

回答

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 *相同的操作,並帶有一點友好的語法和更快的執行。

+0

此外,由於學生不能使用逗號分隔數據,因此您可能需要按空格分解,然後移除逗號等多餘數據,而不是像我的代碼中所示的那樣使用逗號。 – 2013-04-25 02:43:08

+0

你的解決方案爲我做了:)注意採取爆炸。非常感謝你。感謝幫助。 – 2013-04-25 03:08:55

+0

如果我要將字符串與多行數據進行比較,您能否提出一種方法? – 2013-05-04 16:52:37