PHP / MySQL многомерные / ассоциативные массивы - PullRequest
0 голосов
/ 30 сентября 2011

У меня есть этот код, который выбирает данные из MySQL и выводит их в виде массива (многомерного) следующим образом:

$res = @mysqli_query($dbc, "SELECT id, subject, exam, marks, remarks  FROM log WHERE student = '2222' AND term = 'Term2'");
$studentMarks = array();

while ($row = mysqli_fetch_array($res, MYSQLI_ASSOC))
{
    $studentMarks[$row['subject']][$row['exam']] = $row['marks'];
}



//So far the code displays $studentMarks like this:
//$studentMarks = array(
//    Maths => array('CAT1' => 50, 'CAT2' => 35)
//  , English => array('CAT1' => 20, 'MIDTERM' => 40)
//);

//I wish it to add remarks thus displaying $studentMarks like:(Not sure whether I am right)
//$studentMarks = array(
//    Maths => array('CAT1' => array(50,
//          "Good"
//          ), 
//      array('CAT2' => array(35,
//          "Can do better"
//          )
//)
//  , English => array('CAT1' => array(20,
//          "Good"
//          ), 
//      array('MIDTERM' => array(40,
//          "Much better"
//          )
//);

echo '<table><thead><tr>';
echo '<td>Student</td><td>CAT1</td><td>CAT2</td><td>MIDTERM</td>';
echo '</tr></thead><tbody>';



foreach($studentMarks as $studentSub => $marks)
{
  echo '<tr>';
  echo '<td>', $studentSub, '</td>';
  echo '<td>', (isset($marks['CAT1']) ? $marks['CAT1'] : '&nbsp;'), '</td>';
  echo '<td>', (isset($marks['CAT2']) ? $marks['CAT2'] : '&nbsp;'), '</td>';
  echo '<td>', (isset($marks['MIDTERM']) ? $marks['MIDTERM'] : '&nbsp;'), '</td>';
  echo '</tr>';
}

echo '</tbody></table>';

// КОД КОНЦА

Я пытаюсь добиться этого:

ПРЕДМЕТ CAT 1 | CAT 2 | МИДТЕРМ | ENDTERM

МАТ 50 50
Хорошо может сделать лучше
АНГЛИЙСКИЙ 20 40
Может лучше сделать лучше

ВОПРОС:

Как отобразить примечания под / против каждого отображаемого знака?

Ваша помощь высоко ценится ...

1 Ответ

0 голосов
/ 30 сентября 2011
$res = @mysqli_query($dbc, "SELECT id, subject, exam, marks, remarks  FROM log WHERE student = '2222' AND term = 'Term2'");
$studentMarks = array();

while ($row = mysqli_fetch_array($res, MYSQLI_ASSOC))
{
    $studentMarks[$row['subject']][$row['exam']]['mark'] = $row['marks'];

    //This will get the remarks from the database
    $studentMarks[$row['subject']][$row['exam']]['remark'] = $row['remarks'];

    //This should be used when you chose to compare marks and display appropriate remarks
    //$studentMarks[$row['subject']][$row['exam']]['remark'] = ( $row['marks'] < 40)?'can do better':( $row['marks'] < 50)?'do better':'good';
}


    echo '<table><thead><tr>';
    echo '<td>Student</td><td>CAT1</td><td>CAT2</td><td>MIDTERM</td>';
    echo '</tr></thead><tbody>';



    foreach($studentMarks as $studentSub => $marks)
    {
      echo '<tr>';
      echo '<td>', $studentSub, '</td>';
      echo '<td>', (isset($marks['CAT1']) ? $marks['CAT1']['mark'] : '&nbsp;'), '</td>';
      echo '<td>', (isset($marks['CAT2']) ? $marks['CAT2']['mark'] : '&nbsp;'), '</td>';
      echo '<td>', (isset($marks['MIDTERM']) ? $marks['MIDTERM']['mark'] : '&nbsp;'), '</td>';
      echo '</tr>';

      echo '<tr>';
      echo '<td> </td>';
      echo '<td>', (isset($marks['CAT1']) ? $marks['CAT1']['remark'] : '&nbsp;'), '</td>';
      echo '<td>', (isset($marks['CAT2']) ? $marks['CAT2']['remark'] : '&nbsp;'), '</td>';
      echo '<td>', (isset($marks['MIDTERM']) ? $marks['MIDTERM']['remark'] : '&nbsp;'), '</td>';
      echo '</tr>';
    }

    echo '</tbody></table>';
...