2011-11-09 9 views
0

私は計算を整理することができましたが、最後の質問が1つしかないので、このページは完了しました。唯一の問題は、それが計算の答えを得ることができるようにすることです、私は一番下のコースの詳細を表示しなければならなかったので、出力は以下のようになります。コースの詳細を最下部に表示しないようにしたい

Student: Mayur Patel (u0867587) 
Module: CHI2550 - Modern Database Applications Module Mark: 41 Mark Percentage: 68 Grade: B 

Session Session Mark Session Weight 
AAB 72 20% 
Session Session Mark Session Weight 
AAE 67 40% 

Module: CHI2513 - Systems Strategy Module Mark: 31 Mark Percentage: 62 Grade: B 

Session Session Mark Session Weight 
AAD 61 50% 

コース:INFO101 - BSC情報通信技術コースマーク:

Student: Mayur Patel (u0867587) 
Course: INFO101 - Bsc Information Communication Technology Course Mark: 65 

Module: CHI2550 - Modern Database Applications Module Mark: 41 Mark Percentage: 68 Grade: B 

Session Session Mark Session Weight 
AAB 72 20% 
Session Session Mark Session Weight 
AAE 67 40% 

Module: CHI2513 - Systems Strategy Module Mark: 31 Mark Percentage: 62 Grade: B 

Session Session Mark Session Weight 
AAD 61 50% 

問題は、私が一番下にあるコースの詳細を維持するならば、計算が動作することである:65

私はそれは以下のようになりますので、コースの詳細はモジュールの上に出力することにしたいです。 $ courseGradeの計算が一番下に来るので、それを上に移動すると、計算が機能しません。コースマークは0を表示します。

私の質問はどのようにしてコースの詳細を移動できますか?コースに表示されている計算の答えはまだありますか?もちろん

Below is the code: 


$dataArray = array(); 

     while ($row = mysql_fetch_array($result)) { 
      $dataArray[$row['CourseId']]['CourseName'] = $row['CourseName']; 
      $dataArray[$row['CourseId']]['Modules'][$row['ModuleId']]['ModuleName'] = $row['ModuleName']; 
      $dataArray[$row['CourseId']]['Modules'][$row['ModuleId']]['Sessions'][$row['SessionId']]['Mark'] = $row['Mark']; 
      $dataArray[$row['CourseId']]['Modules'][$row['ModuleId']]['Sessions'][$row['SessionId']]['SessionWeight'] = $row['SessionWeight']; 

       if($studentId != $row['StudentUsername']) 
    { 

     //Student has changed 
     $studentId = $row['StudentUsername']; 

     $output .= "<strong>Student:</strong> {$row['StudentForename']} {$row['StudentSurname']} ({$row['StudentUsername']})\n"; 

    } 
     } 

     // just for debugging purposes, let's do a print_r of the array 
     // eliminate this line when you don't need it anymore 
     // print_r($dataArray); 

     foreach ($dataArray as $courseId => $courseData) { 
      // elaborate course data 

      // elaborate course data 
      $moduleCount = 0; 
      $courseTotal = 0; 
      $courseGrade = 0; 

      $courseHTML = ""; 

      $courseHTML .= "<br><table><tr><th>Course:</th><td>" . $courseId . " - " . $courseData['CourseName'] . "</td>"; 

      foreach ($courseData['Modules'] as $moduleId => $moduleData) { 
      // elaborate module data 
      $moduleHTML = ""; 

      $moduleHTML .= "<br><table><tr><th>Module:</th><td>" . $moduleId . " - " . $moduleData['ModuleName'] ."</td>"; 

      $markTotal = 0; 
      $markGrade = 0; 
      $weightSession = 0; 
      $grade = ""; 
      $sessionsHTML = ""; 


      foreach ($moduleData['Sessions'] as $sessionId => $sessionData) { 
       // elaborate session data 
       $markTotal += round($sessionData['Mark']/100 * $sessionData['SessionWeight']); 
       $weightSession += ($sessionData['SessionWeight']); 
       $sessionsHTML .= "<table><tr><th>Session</th><th>Session Mark</th><th>Session Weight</th></tr><tr><td>" . $sessionId . "</td><td>" . $sessionData['Mark'] . "</td><td>" . $sessionData['SessionWeight'] ."%</td></tr></table>\n"; 
      } 
      $markGrade = round($markTotal/$weightSession * 100); 

       // To count the modules, simply add 1 to the counter 
      $moduleCount++; 
      // Add the mark grade to the course total 
      $courseTotal += $markGrade; 


      if ($markGrade >= 70) { $grade = "A"; } 
      else if ($markGrade >= 60 && $markGrade <= 69) { $grade = "B"; } 
      else if ($markGrade >= 50 && $markGrade <= 59) { $grade = "C"; } 
      else if ($markGrade >= 40 && $markGrade <= 49) { $grade = "D"; } 
      else if ($markGrade >= 30 && $markGrade <= 39) { $grade = "E"; } 
      else if ($markGrade >= 0 && $markGrade <= 29) { $grade = "F"; }    

      $moduleHTML .= " <th>Module Mark:</th><td>" . $markTotal . "</td><th>Mark Percentage:</th><td>" . $markGrade . "</td><th>Grade:</th><td>" . $grade . " </td></tr></table><br>"; 
      $output .= $moduleHTML . $sessionsHTML; 
      } // <-- end of sessions foreach 
     } // <-- end of modules foreach 

     // at the end of each course, you can calculate the course grade 
      $courseGrade = ($courseTotal/$moduleCount); 

     $courseHTML .= " <th>Course Mark:" . $courseGrade . "</th></tr></table>"; 

      $output .= $courseHTML; 
      //Display the output 
     echo $output; 

     } // <-- end of courses foreach 
+0

出力の順序を変更しないのはなぜですか? – hakre

答えて

1

、ちょうどあなたがあなたの文字列をecho順序変更:

$output .= $courseHTML;を出力の最後に$courseHTMLを追加します。 $output = $courseHTML . $output;を使用すると、$outputの先頭に$courseHTMLが追加されます。

HTMLが有効であることを確認してください。

関連する問題