带有while和foreach循环的菜单

时间:2016-10-31 16:00:18

标签: php loops foreach while-loop

我对目前的PHP知识感到困惑。我想创建一个菜单,将信息存储到数据库中。我想要实现的目标如下:

<?php
$names= array();
$aliases= array();
$items = array();
?>
<?php while($row = mysqli_fetch_array($menu, MYSQLI_ASSOC)){
    $names[] = $row['page'];
    $aliases[] = $row['alias'];
    $items[] = $row['item'];
}?>

<div id="menu">
    <ul>
        <?php foreach($names as $page_name){
            <a href="*** HERE THE ALIAS CORRESPONDING WITH THE NAME***"><?php echo $page_name;?></a>
        ?>
        *** IF THERE ARE SUB MENU ITEMS, SHOW THEM ***
        <ul>
            <li>
                <a href="*** ALIAS OF SUB ITEM ****">*** NAME OF SUB ITEM***</a>
            </li>
        </ul>
    </ul>
</div>

我完全不知道我是否在合适的垫子上。 foreach仅适用于名称或别名,但我希望将它们组合起来。然后我想检查是否有悬停的子菜单,还要在类“活动”上设置父项。

由于我很难用英语解释,请问我需要的任何问题,以便提供更多信息。

提前致谢!

2 个答案:

答案 0 :(得分:1)

你太复杂了:

<?php 

echo '<div id="menu">
        <ul>';
while($row = mysqli_fetch_array($menu, MYSQLI_ASSOC)){
    $names[] = $row['page'];
    $aliases[] = $row['alias'];
    $items[] = $row['item'];

    echo '<li class="pagename"><a href="'.$row['alias'].'">'.$row['page'].'</a>';

    if ('checkforsubitem') {
        echo '<ul>
                <li>
                    <a href="'.$row['alias_subitem'].'">'.$row['name_of_subitem'].'</a>
                </li>
            </ul>';
    }
}
    echo '</li>
    </ul>
</div>';

?>

然而,这假设有关子菜单的一些事情。通常情况下,您可以在同一查询中获取这些项目,并通过$row将它们提供给您,但您也可以根据$row['id']或其他内容的连接对这些项目进行单独查询,并拉出与该ID对应的子项,并在辅助while项周围运行另一个<li>循环。

答案 1 :(得分:1)

首先,您不需要三个不同的阵列,只有$names阵列就足够了。其次,按以下方式更改while()循环,

while($row = mysqli_fetch_array($menu, MYSQLI_ASSOC)){
    $names[] = array('page_name' => $row['page'], 'alias' => $row['alias'], 'item' => $row['item']);
}

这将创建一个包含名称,别名和子项的多维数组。

最后,按以下方式显示整个菜单

<div id="menu">
    <ul>
        <?php foreach($names as $page_array){ ?>
            <a href="<?php echo $page_array['alias']; ?>"><?php echo $page_array['page_name']; ?></a>
            <?php
                if(!empty($page_array['item'])){
                    ?>
                    <ul>
                        <li>
                            <a href="<?php echo $page_array['item']; ?>"><?php echo $page_array['item']; ?></a>
                        </li>
                    </ul>
                    <?php
                }
        } ?>
    </ul>
</div>