【问题标题】:Categories are repeating for each subcategory每个子类别的类别重复
【发布时间】:2019-09-06 16:32:55
【问题描述】:

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

获取父类的函数

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,它有两个子类别。在下拉一个子类别中显示两次,第二次显示第二个子类别。

数据库结构

我想要什么:

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

【问题讨论】:

  • 您是否对 get_child_category()get_parent_category() 中的 $rows 都使用了 var_dum 来查看 sql 结果?
  • @shojaeddin 是的,但它如何解决我的问题?

标签: php loops categories


【解决方案1】:

在我看来,您似乎没有在此处正确拆分 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>

通常当你有一个循环时,你应该在任何嵌套循环开始之前有一些输出。在您的情况下,第一级循环是关于应该成为父主菜单&lt;ul&gt;&lt;li&gt; 的类别。

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

    foreach($this->parent_category as $cat){ ?>
        <li ...>
          ...
          <ul ...> <?php
            foreach($this->child_category as $child_cat){ ?>
                <li>...</li> <?php
            } ?>
          </ul>
        </li> <?php
    }

【讨论】:

    【解决方案2】:

    当你在$rows 中没有重复值的时候,为什么你又将这部分用于$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'];?>
    

    【讨论】:

      【解决方案3】:

      这是我处理问题的方法

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

      输出

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-11
        • 2021-08-24
        • 1970-01-01
        • 2015-08-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多