【问题标题】:Displaying array in a table by the type of each element按每个元素的类型在表格中显示数组
【发布时间】:2018-04-14 05:22:47
【问题描述】:

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

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

在这个数组中,我有特定菜单的产品(菜单每天都不同)。菜单将由 5 种产品类型构成:主菜、辅料、沙拉、汤、甜点(在数组中,product_type 从 1 到 5)。

我想在一个表格中显示这个,按产品类型构建,从主菜到甜​​点。我这样做并且它正在工作,但我想知道这是否是一种更好的方法,因为我有太多的 foreach。 我在每个echo 之后使用unset($products[$key]); 以提高效率。这样,在我用完一个产品后,我会将它删除,这样下一个 foreach 就不会读取以前的产品。 那么,如何才能更有效地显示呢?

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

显示代码:

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

【问题讨论】:

    标签: php arrays html-table


    【解决方案1】:

    在您的查询ORDER BY product_type 中,然后在您的循环中,您可以检查它是否更改并显示新的。我没有添加表格 HTML,但这是基本过程。您可以加入一个包含product_type 和该产品类型名称的表,而不是$product_types 数组。那么该名称也将出现在 $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'];
    }
    

    【讨论】:

    • 很好,非常感谢
    • 添加html时需要检查是否是第一个知道何时打开和关闭tr标签的产品
    • @Echtniet $product['product_type'] != $prev时将是第一个产品
    • 是的,但我的意思是当它是你需要打开一个 tr 的第一个产品时,但对于其余的你需要关闭以前的 tr 然后打开一个新的 tr
    【解决方案2】:

    你有 product_type 主表吗?

    如果 yes ,你可以用 2 个循环完成你的问题

    1. 循环您可以使用 key product_type name=> 从循环中简单地创建一个数组,该数组将涵盖所有相关产品作为 value 中的 array
    2. 循环制作HTML表格

    【讨论】:

    • 谢谢。与#AbraCadaver 的想法相同,但他的回答更详细
    • 你的 Loop 只适用于 0 而不是 rest,有时产品类型 1 会显示在 0 产品类型中
    【解决方案3】:

    通过这种方式,代码非常干净和实用:

    <?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>';
    
    ?>
    

    【讨论】:

      猜你喜欢
      • 2017-09-18
      • 1970-01-01
      • 2012-06-02
      • 2021-06-01
      • 2021-12-31
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      • 2021-11-25
      相关资源
      最近更新 更多