每个子类别都有重复的类别

时间:2019-04-16 14:20:36

标签: php loops categories

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

获取父类别的功能

dat %>% complete(nesting(x,output),y)

子类别的功能

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;
}

输出和问题

enter image description here

红色的主要类别圈子为 seerah ,其中有两个子类别。在下拉的一个子类别中的第一个显示两次,第二次显示第二个子类别。

数据库结构

enter image description here

我想要的是

我想不重复显示每个父类别下的每个子类别,我该如何实现?

3 个答案:

答案 0 :(得分:0)

在我看来,您似乎没有分割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>的{​​{1}}。

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

<ul>

答案 1 :(得分:0)

当您在$行中没有重复值时,为什么还要对$ cat ['name']使用此部分?

elseif($cat['parent_id']==0){
?>
    <li><a href="<?php echo $cat['url']?>"><span><?php echo $cat['name'];?></span></a></li>
<?php
            }

在foreach的第一部分中创建

<a class="dropdown-toggle" data-toggle="dropdown" href="#"><?php echo $cat['name'];?>

答案 2 :(得分:0)

这是我处理问题的方式

<?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
            }
        }
    ?>

输出

enter image description here