<?php
function allexams(){
$data = "GradingExam=false";
$url = "redacted";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
curl_close ($ch);
return $response;
}
$questionlist = allexams();
$ExamGrade=0;
$questionlist = json_decode($questionlist, true);
for($k=0; $k< Sizeof($questionlist); $k++){ //
$test = $questionlist[$k];
$qlist= implode("%", $test);
$question=explode('%', $qlist);
$m=0;
for ($i=0; $i<Sizeof($question)/15 ; $i++){
while($m<15*($i+1)){//loop for every question
$StuRes = $question[$m];
$m++;
$QValue = $question[$m];
$m++;
$FuncName = $question[$m];
$m++;
$FuncParam = $question[$m];
$m++;
$Constraint = $question[$m];
$m++;
$CaseOneI = $question[$m];
$m++;
$CaseOneO = $question[$m];
$m++;
$CaseTwoI = $question[$m];
$m++;
$CaseTwoO = $question[$m];
$m++;
$CaseThreeI = $question[$m];
$m++;
$CaseThreeO = $question[$m];
$m++;
$CaseFourI = $question[$m];
$m++;
$CaseFourO = $question[$m];
$m++;
$CaseFiveI = $question[$m];
$m++;
$CaseFiveO = $question[$m];
$m++;
$FuncName = str_replace("\r\n",'', $FuncName);
$FuncParam = str_replace("\r\n",'', $FuncParam);
$comments=[];
$newres = '';
// SET UP POINT DEDUCTION VALUE ------------------------------------------
$QValue = intval($QValue);
$Qtot = $QValue;
$QDeduct = 0;
if($CaseThreeI == 'NA'){
$QDeduct = $Qtot/7;
}elseif($CaseFourI == 'NA'){
$QDeduct = $Qtot/8;
}elseif($CaseFiveI == 'NA'){
$QDeduct = $Qtot/9;
}else{
$QDeduct = $Qtot/11;
}
$QDeduct = floor($QDeduct);
// SPLIT STUDENT RESPONSE TO MAKE GRADING EASIER -------------------------
$split = explode("\n", $StuRes, 2);
// START GRADING CONDITIONS ----------------------------------------------
$Failed = True;
// missing def statement
if(strpos($split[0], 'def') === false){
$Qtot = $Qtot-$QDeduct;
$comments[0] = strval($QDeduct);
$comments[1] = "Missing def statement ";
}else{
$comments[0] = "0";
$comments[1] = "Correct def statement ";
$Failed = False;
}
// wrong function name
if(strpos($split[0], $FuncName) === false){
$Qtot = $Qtot-$QDeduct;
$comments[2] = strval($QDeduct);
$comments[3] = "Wrong function Name ";
}else{
$comments[2] = "0";
$comments[3] = "Correct function Name ";
$Failed = False;
}
$n = 0;
if($Failed == TRUE){
$n = ($QValue - $Qtot)+$QDeduct;
$comments[2] = $n;
$Qtot = 0;
}
// SET UP RESULTS TO SEND -----------------------------------------
$ExamGrade = $ExamGrade + $Qtot;
// print_r($ExamGrade);
if($i==0){
$ZeroP = $Qtot;
$ZeroC = json_encode($comments);
}elseif($i==1){
$OneP = $Qtot;
$OneC = json_encode($comments);
}elseif($i==2){
$TwoP = $Qtot;
$TwoC = json_encode($comments);
}elseif($i==3){
$ThreeP = $Qtot;
$ThreeC = json_encode($comments);
}elseif($i==4){
$FourP = $Qtot;
$FourC = json_encode($comments);
}
}
}
}// this is the end of for loop for the question grading conditions
$url = "redacted";
$ch = curl_init(); //create curl object
//set flags
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$thisk); //set variables to pass
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch); //execute curl and save result to a variable
curl_close($ch); //close session
//return info to html file
echo $result;
?>
Проблема под рукой: все выходы (которые являются массивами, содержащими переменную StuRes
, QValue
, FuncName
, et c) заканчиваются на первом l oop Zero C , Я полагаю, что основа проблемы - от for / while l oop. Поскольку $ i не увеличивается для каждого проходящего через него массива, все массивы заканчиваются нулями C. В идеале каждый массив должен иметь свою собственную переменную (ie: ноль C, один C и т. Д. 1025 *).
Пример вывода:
Array (
[0] => 0
[1] => Correct def statement
[2] => 0 [3] => Correct function Name
[4] => 0
[5] => Correct parameter
[6] => 2
[7] => Missing colon
[8] => 0
[9] => Correct constraint
[10] => 0
[11] => Test Case One passed
[12] => 0
[13] => Test Case Two passed
[14] => 0
[15] => Test Case Three passed
[16] => 0
[17] => Test Case Four passed
[18] => 0
[19] => Test Case Five passed
)
Это один массив в качестве примера. На данный момент с моим кодом два таких массива назначены в ноль C. Я хочу, чтобы первый массив был назначен ZeroCa, а второй - OneP.
Примечание: это еще не полный код, поскольку он слишком длинный, но этого должно быть достаточно для понимания проблемы.
Заранее спасибо!