制作HTML类别列表(PHP)

制作HTML类别列表(PHP),php,mysql,html,categories,Php,Mysql,Html,Categories,我有一个名为Category的表,遵循以下模式: id |姓名|家长| id 所以,如果类别x是y的子类,那么x的父类id就是y的id 我还有一个函数,它返回一个包含每行所有列的数组 其返回格式如下: 返回的数组[category\u id1]=数组([category\u name],[category\u parent\u id] 返回的数组[category\u id2]=数组([category\u name],[category\u parent\u id] 等等…它负责将所有类别提取

我有一个名为Category的表,遵循以下模式:

id |姓名|家长| id

所以,如果类别x是y的子类,那么x的父类id就是y的id

我还有一个函数,它返回一个包含每行所有列的数组

其返回格式如下:

返回的数组[category\u id1]=数组([category\u name],[category\u parent\u id] 返回的数组[category\u id2]=数组([category\u name],[category\u parent\u id]

等等…它负责将所有类别提取到一个数组中

现在我想编写一个函数,它将返回

<li>Category 1
    <li>Child 1</li>
    <li>Child 2
     <li>Child x</li>
    </li>
</li>
<li>Category 2
    <li>Child 1</li>
    // etc
</li>
  • 类别1
  • 儿童1
  • 儿童2
  • 儿童x
  • 第2类
  • 儿童1
  • //等

    我在这件事上伤了脑筋,但我就是想不出一个办法……

    在这种情况下,您需要两个数组来轻松处理它,而不需要复杂的,第一个数组应该包含所有类别,例如)

    第二个数组应该只有父Id作为键,子数组作为值(例如)

    现在,您可以在$subcarr数组中循环,并且还有一个循环用于生成child并从$catar数组中获取类别名称

    您可以使用这种方法,这种方法非常常用,也非常简单,


    首先运行查询以获取categoryname和distinct parent Id,并通过它进行循环,然后在循环内部运行另一个查询以获取所有记录,这些记录的父Id为当前循环Id。

    尝试此操作。我没有测试它是否有错误,但想法就在这里

    <?php
    
    $aCats = array(
        1 = array(
            'name'=>'Category 1',
            'childs'=> array(
                2 = array(
                    'name'=>'Category 1 - A',
                    'childs'=> array();
                );  
            );
        );
    );
    
    function printParentChild($aCats)
    {
        $sHtml = '';
    
        foreach($aCats as $aCat)
        {
            if(array_key_exists('childs', $aCat) && is_array($aCat['childs']) )
                $sHtml .= printParentChild($aCat['childs']);
    
            $sHtml .= '<li>'.$aCat.'</li>';
        }
        return '<ul>'.$sHtml.'</ul>';
    }
    
    echo $aCats;
    

    为什么不抓住父对象,循环遍历它们,并在循环遍历时使用父对象的ID查询子对象的可能重复项与问题不直接相关,但您的标记不正确,您不能直接将一个
  • 嵌套在另一个
  • 中。您必须将另一个列表(
      )放在父
    • 中,并将您的子
    • 元素放在其中。
      
      $subCatArr[parentId] = Array([0]=>firstChildId, [1]=> secondChildId ..etc)
      $subCatArr[parentId] = Array([0]=>firstChildId, [1]=> secondChildId ..etc)
      
      <?php
      
      $aCats = array(
          1 = array(
              'name'=>'Category 1',
              'childs'=> array(
                  2 = array(
                      'name'=>'Category 1 - A',
                      'childs'=> array();
                  );  
              );
          );
      );
      
      function printParentChild($aCats)
      {
          $sHtml = '';
      
          foreach($aCats as $aCat)
          {
              if(array_key_exists('childs', $aCat) && is_array($aCat['childs']) )
                  $sHtml .= printParentChild($aCat['childs']);
      
              $sHtml .= '<li>'.$aCat.'</li>';
          }
          return '<ul>'.$sHtml.'</ul>';
      }
      
      echo $aCats;