我有一个看起来像这样的数组,但有更多的元素:
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>
答案 0 :(得分:1)
你有product_type主表吗?
如果是,您可以完成2个循环的问题
答案 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>';
?>