Php 迷失在循环中
我试图创建一个动态菜单与子级,但我认为我在我的循环中迷失了方向。我可以有第1级,但在其他级别之后有相同的名称 我可以应用哪些修改 多谢各位Php 迷失在循环中,php,twitter-bootstrap,Php,Twitter Bootstrap,我试图创建一个动态菜单与子级,但我认为我在我的循环中迷失了方向。我可以有第1级,但在其他级别之后有相同的名称 我可以应用哪些修改 多谢各位 result : we can see at the 2bnd level the same name for all 1st level. Accueil 2nd level Administration 2nd level Index Catalogue Catalogue 2nd le
result : we can see at the 2bnd level the same name for all 1st level.
Accueil
2nd level Administration
2nd level Index Catalogue
Catalogue
2nd level Administration
2nd level Index Catalogue
Configuration
2nd level Administration
2nd level Index Catalogue
<?php
// Select all entries from the menu table
$Qmenus = $Db->prepare('SELECT a.id,
a.link,
a.parent_id,
a.class,
a.sort_order,
amd.label
FROM :table_administrator_menu a,
:table_administrator_menu_description amd
where a.id = amd.id
and amd.language_id = :language_id
ORDER BY a.parent_id,
a.sort_order
');
$Qmenus->bindInt(':language_id', $Language->getId());
$Qmenus->execute();
$Qmenus = $Qmenus->fetchAll();
?>
<!-- Navigation -->
<nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0">
<div class="navbar-default sidebar" role="navigation">
<div class="sidebar-nav navbar-collapse">
<ul class="nav" id="side-menu">
<?php
foreach ($Qmenus as $menus) {
if ($menus['parent_id'] == 0) {
?>
<li>
<a href="#"><i class="fa fa-sitemap fa-fw"></i><?php echo $menus['label']; ?><span class="fa arrow"></span></a>
<?php
foreach ($Qmenus as $menus) {
if ( $menus['parent_id'] == 1) {
?>
<ul class="nav nav-second-level">
<li>
<a href="#">2nd level <?php echo $menus['label']?></a>
</li>
<?php
foreach ($Qmenus as $menus) {
if ( $menus['parent_id'] == 2) {
?>
<li>
<a href="#">Third Level <span class="fa arrow"></span></a>
<ul class="nav nav-third-level">
<li>
<a href="#">Third Level Item</a>
</li>
<li>
<a href="#">Third Level Item</a>
</li>
<li>
<a href="#">Third Level Item</a>
</li>
<li>
<a href="#">Third Level Item</a>
</li>
</ul>
</li>
<?php
}
} // end level 3
?>
</ul>
<?php
} //
} // end level 3
?>
</li>
<?php
} // end level 1
}
?>
</ul>
</div>
<!-- /.sidebar-collapse -->
</div>
<!-- /.navbar-static-side -->
</nav>
表格管理员菜单
id parent_id sort_order class
1 0 2
3 0 1
5 0 3
6 0 4
7 3 1
8 3 2
9 1 1
10 9 0
表说明菜单
id lable language_id
1 Configuration 1
1 Configuration 2
3 Accueil 1
3 Index 2
5 Catalogue 1
5 Catalog 2
7 Administration 1
7 Administration 2
8 Index Catalogue 1
8 Index Shop 2
9 Ma boutique 1
9 My shop 2
10 Configuration générale 1
10 general Configuration 2
前面的示例没有达到您的预期,因此我在上创建了新的联机:
$menu_parent = array();
$menu_sub = array();
foreach ($Qmenus as $menus) {
if ($menus['parent_id']==0) {
$menu_parent[$menus['id']] = $menus;
}
else {
if (isset($menu_parent[ $menus['parent_id'] ])) {
$menu_parent[ $menus['parent_id'] ]['sub_menu'][$menus['id']] = $menus['id'];
$menu_sub[$menus['id']] = $menus;
}
else if (isset($menu_sub[ $menus['parent_id'] ])) {
$menu_sub[ $menus['parent_id'] ]['sub_menu'][$menus['id']] = $menus['id'];
$menu_sub[$menus['id']] = $menus;
}
}
}
foreach($menu_parent as $key => $menus) {
echo '<li><a href="#"><i class="fa fa-sitemap fa-fw"></i>'.$menus['label'].'<span class="fa arrow"></span></a>';
if (!empty($menus['sub_menu'])) {
echo '<ul class="nav nav-second-level">';
foreach($menus['sub_menu'] as $second_level) {
echo '<li><a href="#">'.$menu_sub[ $second_level ]['label'].'</a>';
if (!empty($menu_sub[ $second_level ]['sub_menu'])) {
echo '<ul class="nav nav-third-level">';
foreach($menu_sub[ $second_level ]['sub_menu'] as $third_level) {
echo '<li><a href="#">'.$menu_sub[ $third_level ]['label'].'</a>';
if (!empty($menu_sub[ $third_level ]['sub_menu'])) {
echo '<ul class="nav nav-fourth-level">';
foreach($menu_sub[ $third_level ]['sub_menu'] as $fourth_level) {
echo '<li><a href="#">'.$menu_sub[ $fourth_level ]['label'].'</a></li>';
}
echo '</ul>';
}
echo '</li>';
}
echo '</ul>';
}
echo '</li>';
}
echo '</ul>';
}
echo '</li>';
}
$menu_parent=array();
$menu_sub=array();
foreach($Qmenus作为$menu){
如果($menus['parent_id']==0){
$menu\u父菜单[$menus['id']]=$menus;
}
否则{
如果(isset($menu\U parent[$menus['parent\U id']])){
$menu_parent[$menus['parent_id']]['sub_menu'][$menus['id']]=$menus['id'];
$menu_sub[$menus['id']]=$menus;
}
else if(isset($menu_sub[$menus['parent_id']])){
$menu_sub[$menus['parent_id']]['sub_menu'][$menus['id']]=$menus['id'];
$menu_sub[$menus['id']]=$menus;
}
}
}
foreach($menu\u父项为$key=>$menus){
回音“”;
如果(!空($menus['sub_menu'])){
回声';
foreach($menus['sub_menu']作为$second_level){
回音“- ”;
如果(!empty($menu_sub[$second_level]['sub_menu'])){
回声'
;
foreach($menu_sub[$second_level]['sub_menu']作为$third_level){
回音“- ”;
如果(!empty($menu_sub[$third_level]['sub_menu'])){
echo'
;
foreach($menu_sub[$third_level]['sub_menu']作为$third_level){
回音“”;
}
回声“
”;
}
回音“ ”;
}
回声“
”;
}
回音“ ”;
}
回声“
”;
}
回音“ ”;
}
您正在循环同一字段的树倍,为什么要这样做?如果检查父id
,是否应该有一个循环。好的,我是初学者,如何正确执行。我很乐意帮助您,但是您能打印完整的数组Qmenus
。所以我们可以看到你有什么,因为我们已经知道你想要什么。Tk,我在代码中插入了QmenusOk上的元素,Tk,只是一个3级或4级的问题。它也能工作,因为我需要它。那么我如何理解您的parent\u id
表示项目的级别,我指的是第一级、第二级、第三级等等?是吗?没错,这是我要创建的系统,但是你的系统有问题,你如何连接第二层和第一层,或者第三层和第二层?(在阵列中-看一看,如何连接其中任何一个)?我在想,parent\u id
表示菜单的id
,并且parent\u id=0
,或者您正在计划,数组将始终排序,parent,parent的第二级,3nd级等等,然后是parent,这个parent的第二级。。等等
$menu_parent = array();
$menu_sub = array();
foreach ($Qmenus as $menus) {
if ($menus['parent_id']==0) {
$menu_parent[$menus['id']] = $menus;
}
else {
if (isset($menu_parent[ $menus['parent_id'] ])) {
$menu_parent[ $menus['parent_id'] ]['sub_menu'][$menus['id']] = $menus['id'];
$menu_sub[$menus['id']] = $menus;
}
else if (isset($menu_sub[ $menus['parent_id'] ])) {
$menu_sub[ $menus['parent_id'] ]['sub_menu'][$menus['id']] = $menus['id'];
$menu_sub[$menus['id']] = $menus;
}
}
}
foreach($menu_parent as $key => $menus) {
echo '<li><a href="#"><i class="fa fa-sitemap fa-fw"></i>'.$menus['label'].'<span class="fa arrow"></span></a>';
if (!empty($menus['sub_menu'])) {
echo '<ul class="nav nav-second-level">';
foreach($menus['sub_menu'] as $second_level) {
echo '<li><a href="#">'.$menu_sub[ $second_level ]['label'].'</a>';
if (!empty($menu_sub[ $second_level ]['sub_menu'])) {
echo '<ul class="nav nav-third-level">';
foreach($menu_sub[ $second_level ]['sub_menu'] as $third_level) {
echo '<li><a href="#">'.$menu_sub[ $third_level ]['label'].'</a>';
if (!empty($menu_sub[ $third_level ]['sub_menu'])) {
echo '<ul class="nav nav-fourth-level">';
foreach($menu_sub[ $third_level ]['sub_menu'] as $fourth_level) {
echo '<li><a href="#">'.$menu_sub[ $fourth_level ]['label'].'</a></li>';
}
echo '</ul>';
}
echo '</li>';
}
echo '</ul>';
}
echo '</li>';
}
echo '</ul>';
}
echo '</li>';
}