将关联数组打印到表

时间:2017-12-22 07:04:06

标签: php html arrays html-table associative-array

我有一个像这样的关联数组,我想生成一个包含这些数据的表,比如早餐,小吃,午餐,晚餐,晚餐连续以下是我试过的代码,但是我被困在哪里打破表行,因为当数组包含多个item.i想要将关联数组打印到表

*--------------------------------------------------*
| **Breakfast   Snacks  Lunch   Supper   Dinner**  |
| test          test            test     testfrom
|testfrom
*--------------------------------------------------*

数组输出如下

    Array
(
    [meal_plan_id] => 17
    [calorie_limit] => 1
    [total_calorie] => 0
    [date] => 2017-12-29
    [meal_plan] => Array
        (
            [0] => Array
                (
                    [meal_type] => bf
                    [label] => Breakfast
                    [calorie_limit] => 30
                    [total_calorie] => 0
                    [data] => Array
                        (
                            [0] => Array
                                (
                                    [id] => 107
                                    [label] => test
                                    [quantity] => 10
                                    [unit] => g
                                    [status] => bf
                                )

                            [1] => Array
                                (
                                    [id] => 109
                                    [label] => testfrom
                                    [quantity] => 12
                                    [unit] => g
                                )

                        )

                )

            [1] => Array
                (
                    [meal_type] => sn
                    [label] => Snacks
                    [calorie_limit] => 10
                    [total_calorie] => 0
                    [data] => Array
                        (
                            [0] => Array
                                (
                                    [id] => 108
                                    [label] => test
                                    [quantity] => 121
                                    [unit] => g
                                )

                        )

                )

            [2] => Array
                (
                    [meal_type] => lu
                    [label] => Lunch
                    [calorie_limit] => 20
                    [total_calorie] => 0
                    [data] => Array
                        (
                            [0] => Array
                                (
                                    [status] => su
                                )

                        )

                )

            [3] => Array
                (
                    [meal_type] => su
                    [label] => Supper
                    [calorie_limit] => 30
                    [total_calorie] => 0
                    [data] => Array
                        (
                            [0] => Array
                                (
                                    [status] => sn
                                )

                            [1] => Array
                                (
                                    [id] => 116
                                    [label] => test
                                    [quantity] => 200
                                    [unit] => oz
                                )

                        )

                )

            [4] => Array
                (
                    [meal_type] => dn
                    [label] => Dinner
                    [calorie_limit] => 20
                    [total_calorie] => 0
                    [data] => Array
                        (
                            [0] => Array
                                (
                                    [id] => 113
                                    [label] => test500
                                    [quantity] => 20
                                    [unit] => oz
                                    [status] => dn
                                )

                        )

                )

        )

)

下面是我试过的代码

// $daily_meals = show_daily_meals() // contains the array 
    if(!empty($daily_meals['meal_plan'])){

         echo '<tr>';
        foreach($daily_meals['meal_plan'] as $meal_plan){      

             foreach ($meal_plan['data'] as $data){

                if(!empty($data['id']))
                    echo '<td class="'.$meal_type.'" data-meals-id="'.$data['id'].'"><span class="left">'.$data['label'].'</span> <span class="right">'.$data['quantity'].' <a class="delete_row"><i class="fa fa-trash" aria-hidden="true"></i></a></span><div class="row_loader"></div></td>';

               else echo '<td></td>'; 
            }

            $i++;
            if($i%5 == 0) echo '</tr>';
        }  

    }

2 个答案:

答案 0 :(得分:1)

这是您的解决方案

<强>输入

<?php 
    $array = array(
        array(
            'meal_type' => 'bf',
            'label' => 'Breakfast',
            'calorie_limit' => 30,
            'total_calorie' => 0,
            'data' => array(
                array(
                    'id' => 107,
                    'label' => 'test',
                    'quantity' => 10,
                    'unit' => 'g',
                    'status' => 'bf'
                ),
                array(
                    'id' => 109,
                    'label' => 'testfrom',
                    'quantity' => 12,
                    'unit' => 'g'
                )
            )
        ),
        array(
            'meal_type' => 'sn',
            'label' => 'Snacks',
            'calorie_limit' => 10,
            'total_calorie' => 0,
            'data' => array(
                array(
                    'id' => 108,
                    'label' => 'test',
                    'quantity' => 121,
                    'unit' => 'g'
                )
            )
        ),
        array(
            'meal_type' => 'lu',
            'label' => 'Lunch',
            'calorie_limit' => 20,
            'total_calorie' => 0,
            'data' => array(array('status' => 'su'))
        ),
        array(
            'meal_type' => 'su',
            'label' => 'Supper',
            'calorie_limit' => 30,
            'total_calorie' => 0,
            'data' => array(
                array('status' => 'sn'),
                array(
                    'id' => 116,
                    'label' => 'test',
                    'quantity' => 200,
                    'unit' => 'oz'
                ),
            )
        ),
        array(
            'meal_type' => 'dn',
            'label' => 'Dinner',
            'calorie_limit' => 20,
            'total_calorie' => 0,
            'data' => array(
                array(
                    'id' => 113,
                    'label' => 'test500',
                    'quantity' => 20,
                    'unit' => 'oz',
                    'status' => 'dn'
                )
            )
        )
    );

<强>解决方案

父阵列的第一个foreach。然后第二个为它的孩子..

    foreach($array as $r){
        $$r['label'] = '<table width="100%">';
        foreach($r['data'] as $s){
            if(isset($s['label']))$$r['label'] .= '<tr><td align="center">'.$s['label'].'</td></tr>'; // The if condition check weather the label is exist or not if yes then add that in particular label's table
        }
        $$r['label'] .= '</table>';
    }
    echo '
    <table width="100%" border="1">
        <thead>
            <tr>
                <th>Breakfast</th>
                <th>Snacks</th>
                <th>Lunch</th>
                <th>Supper</th>
                <th>Dinner</th>
            </tr>
        </thead>

此处所有标签都由$$r['label']转换为变量。并且所有都有自己的表现在我们将所有这些表添加到主表中以获得输出。

        <tbody>
            <tr>
                <td>'.$Breakfast.'</td>
                <td>'.$Snacks.'</td>
                <td>'.$Lunch.'</td>
                <td>'.$Supper.'</td>
                <td>'.$Dinner.'</td>
            </tr>
        </tbody>

    </table>';
    //?//    echo "<pre>";print_r($array);

    ?>

<强>输出

Output

答案 1 :(得分:0)

尝试将所有列名存储在一个数组中并使用它创建一个表:

foreach($array as $row) {
    $column[$i]['label'] = $row['label'];
    $column[$i]['data'] = $this->getdata($row['data']); 
    $i++;
}

function getdata($array) {
    $data = '';

    foreach($array as $row) {
        $data. = $row['label'].',';  
    }

    return $data;
}

使用列名创建一个表,并尝试使用循环插入数据,插入