首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类别对每个子类别重复。

类别对每个子类别重复。
EN

Stack Overflow用户
提问于 2019-04-16 14:20:36
回答 3查看 700关注 0票数 0

我在菜单上显示类别。有些类别有子类别。

函数用于获取父类别。

代码语言:javascript
复制
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;
    }

子类别函数

代码语言:javascript
复制
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;
}

在页面上显示如下:

代码语言:javascript
复制
<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结构

我想要的:

我想不重复地显示每个父类别下的每个子类别,我如何做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-17 15:15:04

下面是我如何处理这个问题的方法

代码语言:javascript
复制
<?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
            }
        }
    ?>

输出

票数 2
EN

Stack Overflow用户

发布于 2019-04-16 15:00:32

在我看来,您似乎没有在这里正确地拆分html和循环:

代码语言:javascript
复制
        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>

我认为。您需要将此片段转换为:

代码语言:javascript
复制
    foreach($this->parent_category as $cat){ ?>
        <li ...>
          ...
          <ul ...> <?php
            foreach($this->child_category as $child_cat){ ?>
                <li>...</li> <?php
            } ?>
          </ul>
        </li> <?php
    }
票数 0
EN

Stack Overflow用户

发布于 2019-04-17 14:05:18

当您在$rows中没有重复值时,为什么要将此部分再次用于$cat“‘name”?

代码语言:javascript
复制
elseif($cat['parent_id']==0){
?>
    <li><a href="<?php echo $cat['url']?>"><span><?php echo $cat['name'];?></span></a></li>
<?php
            }

在第一部分中,您创建

代码语言:javascript
复制
<a class="dropdown-toggle" data-toggle="dropdown" href="#"><?php echo $cat['name'];?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55710425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档