按每个元素

时间:2018-04-13 14:23:03

标签: php arrays html-table

我有一个看起来像这样的数组,但有更多的元素:

Array
(
    [0] => Array
        (
            [product_name] => Pizza Craft
            [dependency] => 0
            [product_type] => 1
            [quantity] => 1
        )
)

在这个数组中,我有特定菜单的产品(菜单每天都不同)。菜单将根据5种产品类型进行构建:主菜,装饰,沙拉,汤,沙漠(数组,1-5中的产品类型)。

我想在一个表格中显示这个,从主菜到沙漠的产品类型。我做了这个并且它正在工作,但我想知道它是否更好,因为我有太多的foreach。 我在unset($products[$key]);之后使用echo以提高效率。这样,在我完成产品之后,我将删除它,以便下一个foreach不会读取以前的产品。 那么,我怎样才能更有效地展示它?

注意:我有一个与db中的数组相同的第二个数组,所以如果我需要再次循环,由于某种原因,抛出数组,我不会再向db发出请求。

显示代码:

<table>
            <tr>
                <td>Felul principal:</td>
                <?php foreach($products as $key=>$product):?>
                    <?php if($product['product_type'] == 1):?>
                        <td><?php echo $product['product_name'];?></td>
                        <?php unset($products[$key]);?>
                    <?php endif;?>
                <?php endforeach;?>
            </tr>
            <tr>
                <td>Garnitura:</td>
                <?php foreach($products as $key=>$product):?>
                    <?php if($product['product_type'] == 2):?>
                        <td><?php echo $product['product_name'];?></td>
                        <?php unset($products[$key]);?>
                    <?php endif;?>
                <?php endforeach;?>
            </tr>
            <tr>
                <td>Salata:</td>
                <?php foreach($products as $key=>$product):?>
                    <?php if($product['product_type'] == 3):?>
                        <td><?php echo $product['product_name'];?></td>
                        <?php unset($products[$key]);?>
                    <?php endif;?>
                <?php endforeach;?>
            </tr>
            <tr>
                <td>Supa:</td>
                <?php foreach($products as $key=>$product):?>
                    <?php if($product['product_type'] == 4):?>
                        <td><?php echo $product['product_name'];?></td>
                        <?php unset($products[$key]);?>
                    <?php endif;?>
                <?php endforeach;?>
            </tr>
            <tr>
                <td>Desert:</td>
                <?php foreach($products as $key=>$product):?>
                    <?php if($product['product_type'] == 5):?>
                        <td><?php echo $product['product_name'];?></td>
                        <?php unset($products[$key]);?>
                    <?php endif;?>
                <?php endforeach;?>
            </tr>
    </table>

3 个答案:

答案 0 :(得分:1)

你有product_type主表吗?

如果,您可以完成2个循环的问题

  1. 循环您可以使用 product_type name =&gt;从循环中简单地创建一个数组这将涵盖
  2. 中所有相关产品数组
  3. 制作Html的循环

答案 1 :(得分:1)

在您的查询ORDER BY product_type中,然后在循环中,您可以检查它是否更改并显示新的。我没有添加表格HTML,但这是基本过程。您可以加入包含$product_types的表格以及该产品类型的名称,而不是product_type数组。然后该名称也将出现在$products数组的每一行中:

$product_types = array(1 => 'Felul principal', 2 => 'Garnitura'); //add the rest

$prev = 0;
foreach($products as $product):
    if($product['product_type'] != $prev):
        echo $product_types[$product['product_type']];
        $prev = $product['product_type'];
    }
    echo $product['product_name'];
}

答案 2 :(得分:0)

通过这种方式,代码非常干净且功能齐全:

<?php

    $productTypes = array(
        1 => 'Felul principal',
        2 => 'Garnitura',
        3 => 'Salata',
        4 => 'Supa',
        5 => 'Desert'
    );

    echo '<table>';

    foreach($productTypes as $type => $name){
        foreach($products as $product){
            if($product['product_type']==$type){
                echo '
                    <tr>
                        <td>'.$name.':</td>
                        <td>'.$product['product_name'].'</td>
                    </tr>
                ';
            }
        }
    }

    echo '</table>';

?>