2015-03-10 4 views
0

Мне нужна помощь, я пытаюсь создать динамическую таблицу HTML, которая отобразит некоторые результаты из вложенного массива.Создать таблицу HTML из вложенного массива PHP

Мой массив всегда будет настроить так:

Array 
(
    [column_label] => Size No. 
    [column_data] => Array 
     (
      [0] => Array 
       (
        [column_cell] => #3 
       ) 

      [1] => Array 
       (
        [column_cell] => #3.5 
       ) 

      [2] => Array 
       (
        [column_cell] => #4 
       ) 

      [3] => Array 
       (
        [column_cell] => #4.5 
       ) 

     ) 

) 

Array 
(
    [column_label] => Approx. Diameter Inches 
    [column_data] => Array 
     (
      [0] => Array 
       (
        [column_cell] => 3/32" 
       ) 

      [1] => Array 
       (
        [column_cell] => 7/64" 
       ) 

      [2] => Array 
       (
        [column_cell] => 1/8" 
       ) 

      [3] => Array 
       (
        [column_cell] => 9/64" 
       ) 

     ) 

) 

Array 
(
    [column_label] => Approx. Diameter mm 
    [column_data] => Array 
     (
      [0] => Array 
       (
        [column_cell] => 2.38 
       ) 

      [1] => Array 
       (
        [column_cell] => 2.78 
       ) 

      [2] => Array 
       (
        [column_cell] => 3.18 
       ) 

      [3] => Array 
       (
        [column_cell] => 3.57 
       ) 

     ) 

) 

Array 
(
    [column_label] => Catalog No. 
    [column_data] => Array 
     (
      [0] => Array 
       (
        [column_cell] => 32030 
       ) 

      [1] => Array 
       (
        [column_cell] => 32035 
       ) 

      [2] => Array 
       (
        [column_cell] => 32040 
       ) 

      [3] => Array 
       (
        [column_cell] => 32045 
       ) 

     ) 

) 

мне нужно пройти через каждый [column_data] массив и подготовить их для отображения в ячейках таблицы в моей таблице.

Например, строка в моей таблице должна содержать ячейки таблицы из массива column_data с ключом 0. Следующая строка в моей таблице будет включать ячейки таблицы из массива column_data с ключом из 1 и так далее.

Надеюсь, это имеет смысл. Таким образом, я уверен, что ячейки всегда будут соответствовать заголовку столбца Column_label и отображаться вертикально в ячейках.

Вот моя неудачная попытка (незавершенный):

<?php if ($product_table) { 
    //Setup empty arrays 
    $products = array(); 
    $labels = array(); 
    $data = array(); 
    $column_cells = array(); 

    foreach($product_table as $product) { 
     //echo '<pre>'; 
     //print_r($product); 
     //echo '</pre>'; 
     //echo '<th>' . $product['column_label'] . '</th>'; 
     $products[] = $product; 
     $labels[] = $product['column_label']; 
     $data[] = $product['column_data']; 

      foreach ($product['column_data'] as $column_data) { 
       $column_cells[] = $column_data; 
      } 
     } 

?> 

<table class="table"> 
    <tr> 
     <?php foreach($labels as $label) { 
      echo '<th>' . $label . '</th>'; 
     } ?> 
    </tr> 

    <?php foreach($products as $product) { ?> 
    <tr> 
     <?php 
      echo '<pre>'; 
      print_r($product); 
      echo '</pre>'; 
     ?> 
    </tr> 
    <?php } ?> 
</table> 

<?php } ?> 
+0

У вас есть контроль над настройкой начального массива? Просто любопытно, потому что, если он организован столбцами данных, а не строками в связанном массиве, это немного сложнее, чем нужно, и гораздо труднее читать. –

+0

Не совсем, если я печатаю переменную продуктов вместо продукта, то каждый продукт пронумерован, не уверен, что это помогает. В двух словах я просто column_label должен быть заголовком таблицы, а информация в столбце_данных должна отображаться вертикально под соответствующим заголовком таблицы. Я думал об использовании array_merge или использовании цикла for и подсчета. Все еще не уверен и потратил слишком много времени, пытаясь понять это. – Derek

ответ

1

Вы должны петлю над column_data, и с помощью ключа массива, добавьте column_cell к строке Основе это ключ.

$labels = array(); 
$rows = array(); 

foreach($product_table as $product) { 

    $labels[] = $product['column_label']; 

    foreach ($product['column_data'] as $key => $column_data) { 
     $rows[$key][] = $column_data['column_cell']; 
    } 

} ?> 

Тогда в вас таблице, вы должны цикла по каждому массиву строк, и распечатать данные ячейки

<table class="table"> 
    <tr> 
     <?php foreach($labels as $label) { 
      echo '<th>' . $label . '</th>'; 
     } ?> 
    </tr> 
    <?php foreach($rows as $row) { ?> 
    <tr> 
     <?php foreach($row as $cell) { 
      echo '<td>' . $cell . '</td>'; 
     } ?> 
    </tr> 
    <?php } ?> 
</table> 

Использование данных выборки -

$product_table = array(
    array('column_label' => 'Size No.', 
      'column_data' => array(
       0 => array('column_cell' => '#3'), 
       1 => array('column_cell' => '#3.5'), 
       2 => array('column_cell' => '#4'), 
       3 => array('column_cell' => '#4.5') )  
     ), 
    array('column_label' => 'Approx. Diameter Inches', 
      'column_data' => array(
       0 => array('column_cell' => '3/32"'), 
       1 => array('column_cell' => '7/64"'), 
       2 => array('column_cell' => '1/8"'), 
       3 => array('column_cell' => '9/64"')) 
     ), 
    array('column_label' => 'Approx. Diameter mm', 
      'column_data' => array(
       0 => array('column_cell' => '2.38'), 
       1 => array('column_cell' => '2.78'), 
       2 => array('column_cell' => '3.18'), 
       3 => array('column_cell' => '3.57')) 

     ), 
    array('column_label' => 'Catalog No.', 
      'column_data' => array(
       0 => array('column_cell' => '32030'), 
       1 => array('column_cell' => '32035'), 
       2 => array('column_cell' => '32040'), 
       3 => array('column_cell' => '32045') ) 

     ) 

); 

Вы заканчиваете с данным результатом enter image description here

+0

Вы, сэр, святые. – Derek

+0

всегда рад помочь, счастливая кодировка для вас. – Sean

Смежные вопросы