从嵌套的PHP数组创建HTML表

时间:2015-03-10 17:47:04

标签: php html arrays

我需要一些帮助,我正在尝试创建一个动态HTML表格,它将显示嵌套数组的一些结果。

我的数组总是这样设置:

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 } ?>

1 个答案:

答案 0 :(得分: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