2015-05-02 69 views
5

Đây là một vấn đề đơn giản mà tôi đã cố gắng giải quyết trong vài giờ. Tôi có một mảng chứa thông tin của một số học sinh và điểm số mà họ đã ghi trong các bài kiểm tra. Có tổng cộng 8 môn học, với mỗi môn có 5 tham số.Hiển thị một mảng lồng nhau trong một bảng HTML

Mảng trông giống như dưới đây:

Array 
(
    [Ron] => Array 
     (
      [subject1] => Array 
       (
        [test1] => 47 
        [test2] => 86 
        [total] => 133 
        [percentage] => 88.67 
        [status] => Pass 
       ) 
      [pass_count] => 8 
      [fail_count] => 0 
      [gross_total] => 963 
      [gross_percentage] => 80.25 

      [...] 

      [subject8] => Array 
       (
        [test1] => 48 
        [test2] => 86 
        [total] => 134 
        [percentage] => 89.33 
        [status] => Pass 
       ) 

      [pass_count] => 8 
      [fail_count] => 0 
      [gross_total] => 900 
      [gross_percentage] => 75.50 
     ) 

    [John] => Array 
     (
      [subject1] => Array 
       (
        [test1] => 39 
        [test2] => 72 
        [total] => 111 
        [percentage] => 74 
        [status] => Pass 
       ) 
      [pass_count] => 8 
      [fail_count] => 0 
      [gross_total] => 963 
      [gross_percentage] => 80.25 

      [...]     

      [subject8] => Array 
       (
        [test1] => 39 
        [test2] => 75 
        [total] => 114 
        [percentage] => 76 
        [status] => Pass 
       ) 

      [pass_count] => 8 
      [fail_count] => 0 
      [gross_total] => 846 
      [gross_percentage] => 70.5 
     ) 

) 

tôi cần phải hiển thị như sau trong một bảng HTML định dạng đẹp (tôi đang lập kế hoạch để sử dụng Bootstrap), nhưng tôi không thể cho cuộc đời của tôi con số làm thế nào để làm tổ đúng cách bảng bằng cách sử dụng PHP.

Đây là đánh dấu HTML mà tôi hiện có: http://jsfiddle.net/9y910uvp/

này cho kết quả sau:

Đó là ổn.

Vấn đề thực tế

Tôi đang sử dụng PHP để hiển thị nội dung từ mảng. Tôi đang bối rối cách hiển thị các giá trị cho các phần <tr><td> lồng nhau.

Làm cách nào để lặp qua mảng và hiển thị nội dung chính xác? (Tôi đã đăng các nỗ lực của mình cho đến nay, nhưng tất cả đều ngu ngốc và không hoạt động nên tôi không đăng bài).

Một ví dụ sẽ được đánh giá cao bởi vì tôi đã dành vô số giờ cố gắng để có được điều này làm việc, nhưng thất bại khủng khiếp.

+0

... Bạn thực sự nên đăng bất cứ điều gì làm việc tốt nhất. Nó vô cùng hữu ích. Nếu không ai trong số họ làm việc _at all_, xin vui lòng nói rằng, bởi vì ngay cả đó là thông tin hữu ích –

+0

@QPaysTaxes: Không ai trong số họ làm việc cả. Như tôi đã nói trong câu hỏi. Tôi xin lỗi nếu nó trông giống như một vấn đề bài tập về nhà, nhưng thành thật mà nói tôi đã cố gắng rất nhiều để tự làm nó ... và thất bại. –

+0

@AlliterativeAlice: Đây thực sự là một bảng lồng nhau?Tôi không chắc nữa. –

Trả lời

1

Đánh giá từ mảng của bạn, đây có thể là một cái gì đó giống như những gì bạn đang tìm kiếm:

<table border="1"> 
    <thead> 
     <tr> 
      <th>Name</th> 
      <th>Subject</th> 
      <th>Test1 Marks</th> 
      <th>Test2 Marks</th> 
      <th>Total Marks</th> 
      <th>Status</th> 
      <th>Percentage</th> 
      <th>Pass Count</th>  
      <th>Total Percentage</th> 
     </tr> 
    </thead> 
    <tbody> 
     <?php foreach($arr as $name => $subjects): ?> 
      <?php $i = 0; ?> 
      <?php foreach($subjects as $subjectName => $subject): ?> 
       <?php if (is_array($subject)): ?> 
        <tr> 
         <?php if ($i === 0): ?> 
          <td rowspan="8"><?php echo $name; ?></td> 
         <?php endif; ?> 
         <td><?php echo $subjectName; ?></td> 
         <td><?php echo $subject['test1']; ?></td> 
         <td><?php echo $subject['test2']; ?></td> 
         <td><?php echo $subject['total']; ?></td> 
         <td><?php echo $subject['status']; ?></td> 
         <td><?php echo $subject['percentage']; ?></td>  
         <?php if ($i === 0): ?> 
          <td rowspan="8"><?php echo $subjects['pass_count']; ?></td> 
          <td rowspan="8"><?php echo $subjects['gross_percentage']; ?></td> 
         <?php endif; ?> 
        </tr> 
       <?php endif; ?> 
       <?php $i++; ?> 
      <?php endforeach; ?> 
     <?php endforeach; ?> 
    </tbody> 
</table> 
2

Hãy thử này ra

<table border="1"> 
    <thead> 
    <thead> 
     <tr> 
      <th>Name</th> 
      <th>Subject</th> 
      <th>Test1 Marks</th> 
      <th>Test2 Marks</th> 
      <th>Total Marks</th> 
      <th>Status</th> 
      <th>Percentage</th> 
      <th>Pass Count</th>  
      <th>Total Percentage</th> 
     </tr> 
    </thead> 
    <tbody> 

     </tr> 
     <?php 
     $numberOfSubjects = 3; //I used 3 subjects. You should change this to 8 for your data. 
     foreach ($data as $student => $info) { 
      echo "<tr><td rowspan=$numberOfSubjects />$student</td>"; 

      //flag to let the inner loop the tr has been drawn for the first row 
      $firstRow = true; 
      foreach ($info as $key => $value) { 

       //we only want subject info 
       if (strpos($key, "subject") === 0) { 
        if (!$firstRow) { 
         echo "<tr>"; 
        } //else we already drew it 

        //its a subject so 
        echo "<td>$key</td>"; 
        echo "<td>{$value['test1']}</td>"; 
        echo "<td>{$value['test2']}</td>"; 
        echo "<td>{$value['total']}</td>"; 
        echo "<td>{$value['status']}</td>"; 
        echo "<td>{$value['percentage']}</td>"; 

        //only draw total for the first row 
        if ($firstRow) { 
         echo "<td rowspan=$numberOfSubjects>{$info['pass_count']}</td>"; 
         echo "<td rowspan=$numberOfSubjects>{$info['gross_percentage']}</td>"; 
        } 
        //close the row 
        echo "</tr>"; 
        $firstRow = false; 
       } 
      } 
     } 
     ?> 
    </tbody> 
</table> 

Đây là kết quả:

enter image description here

Dựa trên tập dữ liệu mẫu tôi đã xây dựng từ mô tả của bạn, bao gồm bel ow cho đầy đủ:

<?php 
$data = array(
    "Ron" => Array 
     (
     "subject1" => Array 
      (
      "test1" => 47 
      , "test2" => 86 
      , "total" => 133 
      , "percentage" => 88.67 
      , "status" => Pass 
     ) 
     , "pass_count" => 8 
     , "fail_count" => 0 
     , "gross_total" => 963 
     , "gross_percentage" => 80.25, 
     "subject2" => Array 
      (
      "test1" => 47 
      , "test2" => 86 
      , "total" => 133 
      , "percentage" => 88.67 
      , "status" => Pass 
     ) 
     , "subject3" => Array 
      (
      "test1" => 48 
      , "test2" => 86 
      , "total" => 134 
      , "percentage" => 89.33 
      , "status" => Pass 
     ) 
     , "pass_count" => 8 
     , "fail_count" => 0 
     , "gross_total" => 900 
     , "gross_percentage" => 75.50 
    ), 
    "John" => Array 
     (
     "subject1" => Array 
      (
      "test1" => 47 
      , "test2" => 86 
      , "total" => 133 
      , "percentage" => 88.67 
      , "status" => Pass 
     ) 
     , "pass_count" => 8 
     , "fail_count" => 0 
     , "gross_total" => 963 
     , "gross_percentage" => 80.25, 
     "subject2" => Array 
      (
      "test1" => 47 
      , "test2" => 86 
      , "total" => 133 
      , "percentage" => 88.67 
      , "status" => Pass 
     ) 
     , "subject3" => Array 
      (
      "test1" => 48 
      , "test2" => 86 
      , "total" => 134 
      , "percentage" => 89.33 
      , "status" => Pass 
     ) 
     , "pass_count" => 8 
     , "fail_count" => 0 
     , "gross_total" => 963 
     , "gross_percentage" => 80.25 
    ) 
); 
3

Không hoàn toàn giống đầu ra, nhưng đây là một cách tiếp cận đệ quy mà nên xử lý bất kỳ độ sâu của mảng lồng nhau ...

<?php 

$data = Array (
    "Ron" => Array (
      "subject1" => Array (
       "tests" => Array (
        "test1" => 47, 
        "test2" => 86, 
        "total" => 133, 
        "percentage" => 88.67, 
        "status" => "Pass", 
       ), 
       "pass_count" => 8, 
       "fail_count" => 0, 
       "gross_total" => 963, 
       "gross_percentage" => 80.25, 
      ), 


      "subject8" => Array (
       "tests" => Array (
        "test1" => 48, 
        "test2" => 86, 
        "total" => 134, 
        "percentage" => 89.33, 
        "status" => "Pass", 
       ), 
       "pass_count" => 8, 
       "fail_count" => 0, 
       "gross_total" => 900, 
       "gross_percentage" => 75.50, 

      ), 
    ), 

    "John" => Array (
      "subject1" => Array ( 
       "tests" => Array (
        "test1" => 39, 
        "test2" => 72, 
        "total" => 111, 
        "percentage" => 74, 
        "status" => "Pass", 
       ), 
       "pass_count" => 8, 
       "fail_count" => 0, 
       "gross_total" => 963, 
       "gross_percentage" => 80.25, 

      ), 

      "subject8" => Array (
       "tests" => Array (
        "test1" => 39, 
        "test2" => 75, 
        "total" => 114, 
        "percentage" => 76, 
        "status" => "Pass", 

       ), 
       "pass_count" => 8, 
       "fail_count" => 0, 
       "gross_total" => 846, 
       "gross_percentage" => 70.5, 
      ), 
     ), 
); 


print_r($data); 
$table = table_cell($data); 
echo $table; 


function table_cell($data) { 

    $return = "<table border='1'>"; 
    foreach ($data as $key => $value) { 
    $return .= "<tr><td>$key</td><td>"; 
    if (is_array($value)) { 
     $return .= table_cell($value); 
    } else { 
     $return .= $value; 
    } 
    $return .= "</td><tr>"; 
    } 
    $return .= "</tr></table>"; 
    return($return); 

} 

và bảng trông không có gì giống như yêu cầu nhưng. .. đó là một phần thú vị ...

table output

+0

Để bất cứ ai gặp phải câu trả lời này, THANK YOU! Tôi không thể nhớ câu hỏi nào tôi đã trả lời bằng mã này và tôi cần nó :-) – dbinns66

Các vấn đề liên quan