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>";
}
我已經來回,試圖或多或少進口第二腳本插入到第一,反之亦然,改變各種值等,但我不能得到它的工作。有誰知道編寫代碼的正確方法嗎?
感謝。不過,我仍然在做錯事。無論有多少問題,我都能得到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
該行假定$ _POST的相應答案是一個數組。嘗試print_r($ _ POST)或var_dump($ _ POST)來檢查輸入與答案。 – Xeridea 2015-02-24 04:54:04