我在菜单上显示类别。有些类别有子类别。
函数用于获取父类别。
function get_parent_category(){
$query="select * from blog_categories where parent_id=0
ORDER BY
CASE id
WHEN '2' THEN 1
WHEN '1' THEN 2
WHEN '3' THEN 3
ELSE id
END";
$rows=array();
$result=$this->query($query);
while($row=$this->fetch_array($result)){
$row['url']=$this->get_cat_url($row);
$rows[]=$row;
}
return $rows;
}子类别函数
function get_child_category(){
$query="select * from blog_categories where parent_id!=0";
$rows=array();
$result=$this->query($query);
while($row=$this->fetch_array($result)){
$row['url']=$this->get_cat_url($row);
$rows[]=$row;
}
return $rows;
}在页面上显示如下:
<ul class="nav navbar-nav">
<li><a href="<?php echo BASE_URL ?>">Home</a></li>
<?php
foreach($this->parent_category as $cat){
foreach($this->child_category as $child_cat){
if($cat['id']==$child_cat['parent_id']){
?>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#"><?php echo $cat['name'];?>
<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#"><?php echo $child_cat['name']?></a></li>
</ul>
</li>
<?php
}elseif($cat['parent_id']==0){
?>
<li><a href="<?php echo $cat['url']?>"><span><?php echo $cat['name'];?></span></a></li>
<?php
}
?>
<?php }}?>输出与问题

红色的主要分类圈是seerah,它有两个子类别。为第一个子类别显示两次,第二次显示第二个子类别。
DB结构

我想要的:
我想不重复地显示每个父类别下的每个子类别,我如何做到这一点?
发布于 2019-04-17 15:15:04
下面是我如何处理这个问题的方法
<?php
foreach($this->parent_category as $cat){
$html = '';
foreach($this->child_category as $child_cat){
if($cat['id']==$child_cat['parent_id']){
$html .= '<li><a href="'.$child_cat['url'].'">' . $child_cat['name'] . '</a></li>';
// here is all child categories are saved in var.
}
}
if ($html == '') {
?>
<li><a href="<?php echo $cat['url']?>"><span><?php echo $cat['name'];?></span></a></li>
<?php
} else {
?>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#"><?php echo $cat['name'];?>
<span class="caret"></span></a>
<ul class="dropdown-menu">
<?php echo $html; ?> // here is displayed under parent category
</ul>
</li>
<?php
}
}
?>输出

发布于 2019-04-16 15:00:32
在我看来,您似乎没有在这里正确地拆分html和循环:
foreach($this->parent_category as $cat){
foreach($this->child_category as $child_cat){
if($cat['id']==$child_cat['parent_id']){
?>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#"><?php echo $cat['name'];?>
<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#"><?php echo $child_cat['name']?></a></li>
</ul>
</li>通常,每当您有一个循环时,在任何嵌套循环开始之前都应该有一些输出。在您的示例中,第一级循环是关于类别的,这些类别应该成为父菜单<li>的<ul>。
我认为。您需要将此片段转换为:
foreach($this->parent_category as $cat){ ?>
<li ...>
...
<ul ...> <?php
foreach($this->child_category as $child_cat){ ?>
<li>...</li> <?php
} ?>
</ul>
</li> <?php
}发布于 2019-04-17 14:05:18
当您在$rows中没有重复值时,为什么要将此部分再次用于$cat“‘name”?
elseif($cat['parent_id']==0){
?>
<li><a href="<?php echo $cat['url']?>"><span><?php echo $cat['name'];?></span></a></li>
<?php
}在第一部分中,您创建
<a class="dropdown-toggle" data-toggle="dropdown" href="#"><?php echo $cat['name'];?>https://stackoverflow.com/questions/55710425
复制相似问题