2015-03-03 3 views
-2

Я пытаюсь распечатать таблицу многомерных ассоциативных массивов PHP. Существуют массивы для класса, заданий, учеников, баллы.Как получить доступ к многомерному ассоциативному массиву для печати таблицы?

Я знаком с MySQL-запросами, но я не уверен, как распечатать таблицу из многомерных ассоциативных массивов PHP. Мой мыслительный процесс, чтобы получить доступ к оценке для ученических заданий для класса, похож на MySQL, но я знаю, что здесь не работает. Для одномерного, кажется достаточно простым, но многомерные вложенные ассоциативные массивы. Я не уверен, как подойти к этому?

Заранее благодарен!

<?php 
ini_set('display_errors', 'on'); 

$class=array (
    'cat' => 
    array (
    2 => 
    array (
     'num' => '3', 
     'name' => 'Homework', 
    ), 
), 
    'assignments' => 
    4 => 
    array (
     'clid' => '5000001001388', 
     'assnid' => '1', 
     'cat' => '3', 
     'due' => '20100802', 
     'points' => '5', 
     'title' => 'American Revolution', 
    ), 
), 
    'students' => 
    array (
    3 => 
    array (
     'stuid' => '460798', // stuid is the student's unique alphanumberic ID string 
     'num' => '4', 
     'first' => 'Thomas', 
     'last' => 'Jefferson', 
     'grade' => 'A', // these are summary statistics for the student for the class 
     'percent' => '94.7', // these are summary statistics for the student for the class 
    ), 
), 
    'scores' => 
    array (
    0 => 
    array (
     'assnid' => '1', // corresponds to assignment's 'assnid' 
     'stuid' => '460798', // corresponds to student's 'stuid' 
     'score' => '0', // this is the student's score 
    ), 
), 
); 

// display class properties 
print($class["clid"]."<br>"); 

// display all class properties 
foreach ($class["clid"] == $class["assignments"].["clid"] == $class["students"].["assnid"] as $property=>$value) { 
    print($property . " is " . $value . "<br>"); 
} 
?> 
+0

Итак, какую информацию вы хотите вывести? Вы хотите вывести полную информацию о «баллах» (со студентами и данными о назначении)? – Tamara

+0

Да, я хотел вывести студентов, данные о назначении и оценка. Я добавил мой цикл foreach, который работал. Я не знаю, есть ли более элегантный способ прокрутки многомерного массива. – imparante

+0

Сохраняете ли вы данные «оценки», «назначение» и «учащиеся» в отдельных таблицах SQL? Если да, я бы предложил использовать запросы на соединение - вы делаете запрос на таблицу «баллов» и присоединяетесь к таблице «учеников» в поле «stuid» и присоединяете таблицу «присваивания» в поле «assnid». – Tamara

ответ

0

Поэтому я использовал foreach для прохождения через студентов, заданий и баллов. Я не знаю, есть ли лучший способ сделать это.

echo <<<END 
<body> 
    <table> 
     <thead> 
      <tr><th colspan="5" id="title">US History 2012</th></tr> 
      <tr> 
       <th>Students</th> 
       <th>ID</th> 
       <th>Grade</th> 
       <th>Percentage</th> 
       <th>American Revolution</th> 
      </tr> 
     </thead> 
     <tbody> 
END; 

foreach ($class["students"] as $students){ 
    echo '<tr class="items">'; 
     echo '<td>'.$students["first"].' '.$students["last"].'</td>'; 
     echo '<td>'.$students["stuid"].'</td>'; 
     echo '<td class="grade">'.$students["grade"].'</td>'; 
     echo '<td class="perc">'.$students["percent"].'%</td>'; 

    $i = 0; 
    $score4Avg = 0; 

    foreach ($class["assignments"] as $assignments){  

     foreach ($class["scores"] as $scores){ 

      if ($scores["stuid"] == $students["stuid"] && 
       $scores["assnid"] == $assignments["assnid"]){ 

       echo '<td><input type="text" class="score'.$i.'" value="'.$scores["score"].'" onblur="recalculate();" tabindex="-1"></td>'; 
       $i++; 
      } 

      if ($scores["assnid"] == $assignments["assnid"] && 
       $assignments["title"] == "American Revolution"){ 

       $score4Avg += $scores["score"]; 
      }   
     } 
    } 
    echo '</tr>'; 
}         
Смежные вопросы