2011-09-30 3 views
0

나는 배열 (다차원)로 MySQL의 출력을에서 데이터를 가져 오는 코드 그래서 같은 있습니다PHP/MySQL을 Multidemensional/연관 배열

$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>'; 

// END CODE

내가하려고 달성 :

제목 고양이 1 | 고양이 2 | 미들 | ENDTERM

MATH         50         35
                  좋은     더
영어   20            할 수

가/각 마크에 대한 아래의 발언이 표시 어떻게 표시 할 수 있습니다 :        40
                 는     더

질문을합니까 더 잘 할 수 있습니까? 나는 발언이 데이터베이스에 이미있는 것을 의미하지만

여러분의 도움이 많이 감사합니다 ... 당신의 답변을

답변

0
$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>'; 
+0

감사 mahadeb. 데이터베이스에서 발언을 가져와 표시와 비교하여 표시하려면 어떻게합니까? – Brian

+0

나는이 코드를 해결할 수 있었다 ... 내가했던 모든 것은 비유 비교를 제거하고 이것을 $ row [ 'remarks']와 바꾸었다. $ studentMarks [$ row [ 'subject']] [$ row [ 'exam' ]] [ 'remark'] = $ row [ 'remarkarks']; . 너무 감사합니다. 나는 문제가 해결되었다고 말할 수있다. – Brian