php递归函数不起作用


php recursion function not working

我有一个递归函数来显示类别和子类别,它运行良好,但在每个位置都添加了额外的<ul></ul>

php代码

<?php
     echo '<ul class="nav">';
     function mainMenu($parentId, $connection) {
     $sqlTours = "SELECT * FROM categories 
     WHERE category_parent = ".$parentId." ORDER BY category_order ASC";
     $rsTours = mysql_query($sqlTours, $connection) or die(mysql_error());
     $totalToursRows = mysql_num_rows($rsTours);
        echo "<ul>";
        while($rowsTours = mysql_fetch_assoc($rsTours)) {
         $categoryId = $rowsTours['category_id'];
         $categoryName = $rowsTours['category_name_en'];
         echo "<li>"
            <a href='"products.php?category_id=".$categoryId ."'"
            data='"".$categoryId."'">".$categoryName."</a>";
              mainMenu($categoryId, $connection);
              echo "</li>";
        }
        echo "</ul>";

}
mainMenu(0, $connection); 
echo '</ul>';
?>

这是我从这个函数中得到的html

    <ul class="nav">
  <ul>
    <li> <a href="products.php?category_id=1" data="1">Egypt</a>
      <ul>
        <li> <a href="products.php?category_id=2" data="2">Hurghada</a>
          <ul>
            <li> <a href="products.php?category_id=7" data="7">Sea Trips</a>
              <ul>
              </ul>
            </li>
            <li> <a href="products.php?category_id=6" data="6">Safari Trips</a>
              <ul>
              </ul>
            </li>
          </ul>
        </li>
        <li> <a href="products.php?category_id=3" data="3">Sharm El Sheikh</a>
          <ul>
          </ul>
        </li>
        <li> <a href="products.php?category_id=4" data="4">Taba</a>
          <ul>
          </ul>
        </li>
      </ul>
    </li>
    <li> <a href="products.php?category_id=5" data="5">Turkey</a>
      <ul>
      </ul>
    </li>
  </ul>
</ul>

这是预期的输出

<ul class="nav">
  <li><a href="products.php?category_id=1" data="1">Egypt</a>
    <ul>
      <li><a href="products.php?category_id=2" data="2">Hurghada</a>
        <ul>
          <li><a href="products.php?category_id=7" data="7">Sea Trips</a></li>
          <li><a href="products.php?category_id=6" data="6">Safari Trips</a></li>
        </ul>
      </li>
      <li><a href="products.php?category_id=3" data="3">Sharm El Sheikh</a></li>
      <li><a href="products.php?category_id=4" data="4">Taba</a></li>
    </ul>
  </li>
  <li> <a href="products.php?category_id=5" data="5">Turkey</a></li>
</ul>

如果我正确理解你的问题,你想去掉递归下降底部的空<ul></ul>标记。

您已经将行计数到$totalToursRows中,因此使用它来防止创建空节点:

function mainMenu($parentId, $connection) {
    $sqlTours = "SELECT * FROM categories
    WHERE category_parent = ".$parentId." ORDER BY category_order ASC";
    $rsTours = mysql_query($sqlTours, $connection) or die(mysql_error());
    $totalToursRows = mysql_num_rows($rsTours);
    if ($totalToursRows > 0) {
        if ($parentId !== 0) {
            echo "<ul>";
        }
        while($rowsTours = mysql_fetch_assoc($rsTours)) {
            $categoryId = $rowsTours['category_id'];
            $categoryName = $rowsTours['category_name_en'];
            echo "<li>";
            echo "<a href='"products.php?category_id=".$categoryId ."'"
                data='"".$categoryId."'">".$categoryName."</a>";
            mainMenu($categoryId, $connection);
            echo "</li>";
        }
        if ($parentId !== 0) {
            echo "</ul>";
        }
    }
}
mainMenu(0, $connection); 

根据评论请求编辑。