按标题分组的显示菜单 - 按数组分组

时间:2013-08-09 19:44:11

标签: php

我四处寻找分组,但我找不到任何有意义或有效的东西。

我试图制作一个带有分组标题的菜单,如沙拉/披萨/意大利面等 我得到它保存到数据库很好,我把它作为一个数组读取(我认为它被称为多维[如果你知道什么转储数组被正确调用请告诉我id想知道]。

这是我的数组转储

Array
(
    [heading] => Array
    (
        [0] => Salads
        [1] => Salads
        [2] => Pasta
    )

    [special] => Array
    (
        [0] => 
        [1] => 
        [2] => 
    )

    [item] => Array
    (
        [0] => Small Green
        [1] => Regular Caesar
        [2] => Baked Lasagna
    )

    [description] => Array
    (
        [0] => Grape tomatoes, onions, green peppers and cucumbers on the bed of crisp lettuce.
        [1] => Classic recipe with romaine lettuce and croutons
        [2] => With meat sauce, tomato vegetarian sauce or Alfredo sauce
    )

    [price] => Array
    (
        [0] => See Desc
        [1] => $5.99
        [2] => $9.69
    )

    [notes] => Array
    (
        [0] => Available in Small ($2.99), Regular ($5.99)
        [1] => 
        [2] => 
    )

    [submit_val] => Submit
)

我用这个作为php输出数据(减去mysql信息)

for($i = 0; $i < count($array['heading']); $i++) {
    ?>
    <tr>    <td colspan="2" align="center" class="section"><?=$array['heading'][$i]; ?></td></tr>
    <tr>    <td colspan="2">&nbsp;</td></tr>

    <tr>    <td class="selection"><b><?=$array['item'][$i]; ?>.
    </b>
    &nbsp;<i><?=$array['description'][$i]; ?></i><br>
    <SMALL><I><?=$array['special'][$i]; ?></I></SMALL><SMALL><?=$array['notes'][$i]; ?></SMALL>
    </td>
    <td class="selection" align="right" valign="top"><?=$array['price'][$i]; ?></td>
    </tr>
    <?

}// for i loop

这是现在的菜单screenshot of menu

所以如何制作它以便沙拉在一个标题而不是两个请注意,我有多个标题的多个项目(具有相同的标题,即各种比萨饼等)

提前感谢您提供的任何帮助

2 个答案:

答案 0 :(得分:1)

您可以缓存最后一个标题并执行if语句:

<?php
$last_heading = '';
for($i = 0; $i < count($array['heading']); $i++) {
    if ($last_heading !== $array['heading'][$i]) { ?>
    <tr>    <td colspan="2" align="center" class="section"><?=$array['heading'][$i]; ?></td></tr>
    <?php $last_heading = $array['heading'][$i]; } // end if ?>
    <tr>    <td colspan="2">&nbsp;</td></tr>

    <tr>    <td class="selection"><b><?=$array['item'][$i]; ?>.
    </b>
    &nbsp;<i><?=$array['description'][$i]; ?></i><br>
    <SMALL><I><?=$array['special'][$i]; ?></I></SMALL><SMALL><?=$array['notes'][$i]; ?></SMALL>
    </td>
    <td class="selection" align="right" valign="top"><?=$array['price'][$i]; ?></td>
    </tr>
    <?

}// for i loop

这确实假设你的所有标题都是这样的。

答案 1 :(得分:0)

假设您要通过数据库中的标题对结果进行分组,这会将同一标题的所有项目保持在一起,那么您可能会使用以下内容进行处理:

<?php    
    for($i = 0; $i < count($array['heading']); $i++) {
        if($array['heading'][$i] != $array['heading'][$i-1]){ // Compare headings
?>
    <tr>    <td colspan="2" align="center" class="section"><?=$array['heading'][$i]; ?></td></tr>
<?php 
        } //endif compare 
?>
    <tr>    <td colspan="2">&nbsp;</td></tr>
    <tr>    <td class="selection"><b><?=$array['item'][$i]; ?>.</b>
    &nbsp;<i><?=$array['description'][$i]; ?></i><br>
    <SMALL><I><?=$array['special'][$i]; ?></I></SMALL><SMALL><?=$array['notes'][$i]; ?></SMALL>
    </td>
    <td class="selection" align="right" valign="top"><?=$array['price'][$i]; ?></td>
    </tr>
<?

    }// for i loop
?>