Php 显示无递归函数的树状菜单

Php 显示无递归函数的树状菜单,php,hierarchical-data,Php,Hierarchical Data,我的桌子看起来像 ID | Parent | Name | Level 1 | 0 | Cat1 | 0 2 | 1 | SubCat1 | 1 3 | 0 | Cat2 | 0 4 | 3 | SubCat2 | 1 5 | 4 | SubCat3 | 2 6 | 3 | SubCat4 | 3 我需要按以下顺序显示数据: Cat1 SubCat1

我的桌子看起来像

ID | Parent    | Name    | Level
 1 | 0         | Cat1    | 0
 2 | 1         | SubCat1 | 1
 3 | 0         | Cat2    | 0
 4 | 3         | SubCat2 | 1
 5 | 4         | SubCat3 | 2
 6 | 3         | SubCat4 | 3
我需要按以下顺序显示数据:

 Cat1
      SubCat1
 Cat2
      Subcat2
          SubCat3
      SubCat4
我可以用递归函数很好地执行它,但现在的要求是不用递归函数。请帮帮我,我也对水平场很困惑

要从数据库获取的代码:

class Sitemap
{ 


public static function getTopCategories()
{
    return self::getCategories('parent=0');
}

public static function getCategories($where='')
{
    if ($where) $where = " WHERE $where";
    $result = mysql_query("SELECT * FROM sitemap $where");

    $categories = array();
   //while ($category = mysql_fetch_object($result, 'Category'))
    while ($category = mysql_fetch_array($result)){
    $my_id = $category['id'];

    $category['children'] = Sitemap::getCategories("parent = $my_id");

            $categories[] = $category;
        }

     mysql_free_result($result);
    return $categories;
  }


 }
要显示的代码(使用Smarty):

{foreach from=$sitemap item=c name=sitemap}
{如果$c.parent==0}
    • {foreach item=d from=$c.children name=sitemap}
    • {/foreach} {else}
      • {/if}
    • {/foreach}
  • 试试这个:->
    带递归函数
    功能菜单($p_id='0')
    {
    $q1=“从菜单中选择*,其中p_id=”$p_id';
    $r1=mysql\u query($q1)或die(mysql\u error());
    而($s1=mysql\u fetch\u数组($r1))
    {
    回声“$s1['name']”=>”;
    $q2=“从p_id='$s1[id]'的菜单中选择*”;
    $r2=mysql_查询($q2)或死亡(mysql_错误()“第二次查询错误”);
    $ro2=mysql\u num\u行($r2);
    如果($ro2>0)
    {
    $p_id=$s1['id'];
    菜单(p_id);
    }
    回声“
    ”; } } 回声菜单();
    没有递归函数::

    You have to use procedure language like this
    
    <ul>
        <?php
        $query="select * from table where pid='0'";
         $q1=mysql_query($query);
        while($row=mysql_fetch_array($q1))
         {
            echo "<li>$row[pname]
              // 2nd step check and wirite query and diplay and so on
         <echo "</li>"; 
         }
        ?>
    </ul>
    
    您必须像这样使用过程语言
    

      你有什么密码?你做了什么研究?你认为它应该如何工作?你尝试了什么?我做了关于stackoverflow的研究,但没有找到任何帮助,所以我在这里问。。。关于代码,我使用两个foreach循环来显示cat n子cat。。但是我只能进入两个级别。表是在DB中吗?你是怎么得到的?如果需要帮助,请输入代码示例。已更新,请立即查看,请删除问题的否定点,以便我可以获得答案。我是否需要发布其他内容,或者这就足够了?很抱歉,loop无法用于当前问题。请参考smarty
       Try this :->
      
      
       with recursive function
      
       function menu ($p_id='0')
       {
      
           $q1="select * from menu where p_id='$p_id'";
           $r1=mysql_query($q1) or die(mysql_error());
           while($s1=mysql_fetch_array($r1))
             {
                echo "&nbsp;&nbsp;&nbsp;".$s1['name']."=>";
                $q2="select * from menu where p_id='$s1[id]'";
                $r2=mysql_query($q2) or die(mysql_error()."2nd query error");
                $ro2=mysql_num_rows($r2);
                if($ro2>0)
                {
                   $p_id=$s1['id'];
                   menu($p_id);
                }
      
               echo "<br/>";
           }
      
       }
      
      
      
         echo menu();
      
      You have to use procedure language like this
      
      <ul>
          <?php
          $query="select * from table where pid='0'";
           $q1=mysql_query($query);
          while($row=mysql_fetch_array($q1))
           {
              echo "<li>$row[pname]
                // 2nd step check and wirite query and diplay and so on
           <echo "</li>"; 
           }
          ?>
      </ul>