PHP foreach循环和错误的HTML标记位置


php foreach loop and incorrect placement of html tags

我有一个关于在php循环之间放置正确的div持有人的问题。我正在创建一个包含类别和子类别的菜单,如下图所示。

类别可以有子类别,但并非总是如此。我已经做了这样的php代码。但是我有一些问题与我的php循环和foreach循环内的标签位置。

这是它应该如何显示的html代码:

<!--Category Menu -->
<div class='categoriesmenuFather ' id='nav-cat' style='display:block' >
<div class='categories_list categoriesmenu '>
 <ul class='level1'>
<li class='submenu border_t'>
<div class=cat_bg> 
<a title='Electronics' href='#'><span>Electronics</SPAN></a>
</div>
<!--BOF Sub-category-->
<ul class='level2'>
<li><a href="#">LED</a></li>
<li><a href="#">DVD Players</a></li>
</ul>
</li> 
<!--EOF Sub-category-->
<li class='submenu border_t'>
<div class=cat_bg> 
<a title='Electronics' href='#'><span>Computers & Networking</SPAN></a>
</div>
<!--BOF Sub-category-->
<ul class='level2'>
<li><a href="#">Tablet</a></li>
</ul>
</li> 
<!--EOF Sub-category-->
<li class='submenu border_t'>
<div class=cat_bg> 
<a title='Electronics' href='#'><span>Cell Phones</SPAN></a>
</div>
</ul>
</div>
</div>

对于我现在的循环代码,html显示为:

<!--BOF Left Menu -->
<div class='categoriesmenuFather ' id='nav-cat' style='display:block' >
<div class='categories_list categoriesmenu '>
<ul class='level1'>
<li class='submenu border_t'>
<div class=cat_bg> 
<a title='Electronics' href='products.php?catid=1'><span>Electronics</SPAN></a>
</div>

<!--BOF Sub-category-->
<ul class='level2'>
<li><a href="products.php?catid=1&subcatid=1">LED</a></li>
<li><a href="products.php?catid=1&subcatid=2">DVD Players</a></li>
</ul></li>  
<!--EOF Sub-category-->
<li class='submenu border_t'>   
<div class=cat_bg> 
<a title='Computers' href='products.php?catid=2'><span>Computers & Networking</SPAN></a>
</div>
<!--BOF Sub-category-->
<ul class='level2'>
<li><a href="products.php?catid=2&subcatid=3">Tablet</a></li>
</ul></li>  
<!--EOF Sub-category-->
<li class='submenu border_t'>   
<div class=catall_bg>
<a title='Cell Phones' href='products.php?catid=3'><span>Cell Phones</SPAN></a>
</div>
</ul></li>  
<!--EOF Sub-category-->

<li class='submenu border_t'>
<div class=catall_bg>
<a title='Video Games' href='products.php?catid=4'><span>Video Games</SPAN></a>
</div>
</ul></li>  

 </ul>
</div>
 </div>

在没有子类别的产品中,如手机和视频游戏,/ul和/li
标签正在被包含,结果是最后一项显示在此图像中(设计更改)。

我的php代码如下:
<?php
    include_once 'connstring.inc.php';
    //Get records from database
    $q = $conn->prepare("SELECT DISTINCT *, C.category_id
    FROM category C LEFT OUTER JOIN subcategory S
    ON C.category_id = S.category_id AND S.status = 'Enabled' 
    WHERE C.status = 'Enabled'
    ");
    $q->execute();   
    $result = $q->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_GROUP);
    if ($result !== false) {
    ?>
    <div class='categoriesmenuFather ' id='nav-cat' style='display:block' >
    <div class='categories_list categoriesmenu '>
     <ul class='level1'>
    <?php
    foreach($result as $key => $rows) {
    if (!empty($rows)) {
    $i = 1;
    foreach($rows as $row) {
    if ($i == 1) {
    ?>
    <li class='submenu border_t'>
    <?php
    //to not display arrow, check for subcategory items is none
    if (is_null($row['subcategory_name']) || (string)$row['subcategory_name'] == ''){
    ?>  
    <div class=catall_bg>
    <a title='<?php echo $row['category_name']; ?>' href='products.php?catid=<?php echo $row['category_id']; ?>'><span><?php echo $row['category_name']; ?></SPAN></a>
    </div>
    <?php
    }
    else
    {
    ?>
    <div class=cat_bg> <!--for sub-cat-arrow-->
    <a title='<?php echo $row['category_name']; ?>' href='products.php?catid=<?php echo $row['category_id']; ?>'><span><?php echo $row['category_name']; ?></SPAN></a>
    </div><!--sub-cat-arrow close-->
    <?php
    }
    ?>

    <?php
    //to not display subcategory items if none
    if (is_null($row['subcategory_name']) || (string)$row['subcategory_name'] == ''){
    break;
    }
    ?>  
    <!--BOF Sub-category-->
    <ul class='level2'>
    <?php
    }
    ?>
    <li><a href="products.php?catid=<?php echo $row['category_id'].'&subcatid='.$row['subcategory_id']; ?>"><?php echo $row['subcategory_name']; ?></a></li>
    <?php
    $i++;
     }
    echo'</ul></li>';
    ?>  
    <!--EOF Sub-category-->
    <?php
    }
    }  

    } else {
    throw new PDOException('No records');
    }
    ?>
    </ul>
    </div>
    </div>  

我知道这是一个在循环内放置标签的问题。但我找不到它的位置。请求帮助。

看这部分:

<?php
//to not display subcategory items if none
if (is_null($row['subcategory_name']) || (string)$row['subcategory_name'] == ''){
break;
}
?>  
<!--BOF Sub-category-->
<ul class='level2'>
<?php
}
?>
<li><a href="products.php?catid=<?php echo $row['category_id'].'&subcatid='.$row['subcategory_id']; ?>"><?php echo $row['subcategory_name']; ?></a></li>
<?php
$i++;
 }
echo'</ul></li>';
?>  
<!--EOF Sub-category-->
<?php
}
}  

在这里你可以找到你的问题。你正在关闭一个没有打开的ul标签,因为break

我认为你需要关闭ul标签,如果被打开,"打破"的解决方案对我来说有点讨厌…* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。

i认为您必须将<ul class='level2'>置于if ($i == 1) {之外

当前在if条件内