Несколько массивов присваиваются одной и той же переменной из-за неисправности цикла /, в то время как l oop не увеличивается (php) - PullRequest
0 голосов
/ 29 апреля 2020
<?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.

Примечание: это еще не полный код, поскольку он слишком длинный, но этого должно быть достаточно для понимания проблемы.

Заранее спасибо!

...