2012-06-01 42 views
2

比較值,我想用PHP年級測驗。我有一個測驗,在提交後提供一系列答案。他們都是真/假使陣列像最有效的方式在一個陣列中的PHP

array([0] => T, [1] => F, [2] => F) 

然後,我有一個答案的關鍵,像

array([0] => T, [1] => F, [2] => T) 

我需要辦理每個答案,所以我不能只計算正確的百分比,但也顯示正確的答案,如果錯過的問題數量少於20%,那麼錯過的答案也會錯過。

所以我的問題是,我應該做某種foreach循環都要經過每一個,或者這將是整潔使用某種類型的數組進行比較的功能,如果是這樣,哪個?

回答

3

使用foreach()

$answer = array(true, true, false, true, false); 
$expected = array(true, true, true, true, false); 
$error = array(); 

foreach ($answer as $k => $v) { 
    if ($v !== $expected[$k]) 
    $error[$k] = $v; 
} 

// Display the correct answer if number of mistakes is <= 20% 
if (floatval(count($error)/count($expected)) <= .2) { 
    $correct = array_intersect_key($expected, $error); 
} 
0

隨着foreach循環,你將有更多的控制。您可以通過將數組中的相等值除以總問題計數來確定正確的百分比。

0

採取分級陣列作爲起點。 因爲它應該包含所有的按鍵(所有問題),你可以用它們來檢測提交陣列在丟失的鑰匙和找到所有的答案。 如果你要計算手動報告,這裏有一個例子:

$submission = array(1 => true, 3 => false, 4 => true, 100 => true); 
$grading = array(0 => true, 1 => true, 2 => true, 3 => true, 4 => true); 


//gather data 
$answered = array(); 
$missing = array(); 
$correct = array(); 
$wrong = array(); 
foreach ($grading as $key => $answer) { 
    if(array_key_exists($key, $submission)) { 
     array_push($answered, $key); 
     if ($submission[$key] === $answer) 
      array_push($correct, $key); 
     else 
      array_push($wrong, $key); 
    } 
    else 
     array_push($missing, $key); 
} 


//print report 
echo "correct\n"; 
print_r($correct); 
echo "\n\n"; 

echo "wrong\n"; 
print_r($wrong); 
echo "\n\n"; 

echo "missing\n"; 
print_r($missing); 
echo "\n\n"; 

echo "% answered\n"; 
echo 100*(count($answered)/count($grading)); 
echo "\n\n"; 

echo "% correct (of all questions)\n"; 
echo 100*(count($correct)/count($grading)); 
echo "\n\n"; 

echo "% correct (of all answered)\n"; 
echo 100*(count($correct)/count($answered)); 
echo "\n\n"; 

echo "% wrong (of all questions)\n"; 
echo 100*(count($wrong)/count($grading)); 
echo "\n\n"; 

echo "% wrong (of all answered)\n"; 
echo 100*(count($wrong)/count($answered)); 
相關問題