2015-02-24 76 views
0

這是我用來爲數據庫供電的測驗評分的腳本。它的工作原理 - 但前提是隻有一個問題有多個答案(在這種情況下爲#10)。將數組中的數組答案鍵調整爲簡單數組答案密鑰

if (isset($_POST)): 

$totalCorrect = 0; 
$answers = array(1 => 'A', 2 => 'banana', 3 => 'C', 4 => 'D', 5 => 'A', 6 => 'C', 7 => 'C', 8 => 'C', 9 => 'B', 10 => array('A','B','C')); 

foreach ($answers as $num => $answer): 

    $question = 'q'.$num; 

    if(is_array($answer) && isset($_POST[$question])){ 
     $ans_cnt = count($answer); 
     $ans_value = (1/$ans_cnt); 

     $post_cnt = count($_POST[$question]); 

     //find matches between answer array and post array 
     $matches = array_intersect($answer,$_POST[$question]); 
     $good_answers = count($matches); 
     //Get bad answer count, which be be subtracted from overall score 
     $bad_answers = 0; 
     foreach($_POST[$question] as $post_answer): 
      if(!in_array($post_answer,$answer)): 
       $bad_answers++; 
      endif; 
     endforeach; 

if($good_answers ==3 && $bad_answers==0){ 
$result = 1; 
}else{ 
$result = 0; 
} 

     if(($post_cnt != $ans_cnt) || ($post_cnt == $ans_cnt && $ans_cnt != count($matches))){ 
      $result = $result * $ans_value; 
      $totalCorrect = $totalCorrect + $result;  
     }else{    
      $totalCorrect++;   
     } 

    }elseif(isset($_POST[$question]) && strtolower($_POST[$question]) === strtolower($answer)){ 
     $totalCorrect++; 
    } 
endforeach; 

$pct = round((($totalCorrect/count($answers)) * 100), 0); 
echo $totalCorrect.' correct ('.$pct.'%)'; 
endif; 

我想修改它,這樣我可以創建任意數量的多個答案的問題,即使我還是要手工編寫每個答案的關鍵。這是我現在正在處理的腳本,儘管我還沒有完成它的工作。

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
$qa = $_POST['q']; 
$correct = 0; 

$answers = array(1 => array('A'), 
      2 => array('banana'), 
      3 => array('C'), 
      4 => array('D'), 
      5 => array('A'), 
      6 => array('C'), 
      7 => 'C', 
      8 => 'C', 
      9 => 'B', 
      10 => array('A','B','C')); 
$total = count($answers); 
foreach($answers as $k => $v){ 
    if(is_array($v)){ 
     if($qa[$k] === $answers[$k]){ 
      $correct++; 
     } 
    }else{ 
     if($qa[$k] === $answers[$k]){ 
      $correct++; 
     } 
    } 
} 
$grade= ($correct/count($answers))*100; 
echo"<p>Score $grade %</p>"; 
} 

我已經來回,試圖或多或少進口第二腳本插入到第一,反之亦然,改變各種值等,但我不能得到它的工作。有誰知道編寫代碼的正確方法嗎?

回答

1

使用和array_diff() http://php.net/manual/en/function.array-diff.php

foreach($answers as $k => $v){ 
    if(is_array($v)){ 
     if(array_diff($qa[$k], $v) == array()){ 
      $correct++; 
     } 
    } else if($qa[$k] === $v){ 
     $correct++; 
    } 
} 
+0

感謝。不過,我仍然在做錯事。無論有多少問題,我都能得到70%的最終分數。我已經嘗試了每個$ ga的三個值:1)$ qa = $ _POST ['q']; 2)$ qa = $ _POST ['q'。'$ num']; 3)$ qa ='q'。$ num;我也收到一條錯誤消息:警告:array_diff():參數#1不是數組 - 顯然是參考這一行: foreach($ answers as $ k => $ v){if_array( (array_diff($ qa [$ k],$ v)== array()){ – 2015-02-24 01:47:39

+0

該行假定$ _POST的相應答案是一個數組。嘗試print_r($ _ POST)或var_dump($ _ POST)來檢查輸入與答案。 – Xeridea 2015-02-24 04:54:04

相關問題