0

功能很简单:

 function showMenu( $level = 0 ) {

    $sql = "SELECT * FROM `menus` WHERE `submenu`=".$level;

    $result = mysql_query( $sql );

    echo "<ul>";

        while ( $node = mysql_fetch_array( $result ) ) {

            echo "<li>". $node['name'];

            $sql_ = "SELECT * FROM `menus` WHERE `submenu`=".$node['id'];

            $hasChild = mysql_fetch_array( mysql_query( $sql_ ) ) != null;

            if ( $hasChild ) {

                showMenu( $node['id'] );

            }

            echo "</li>";

        }

    echo "</ul>";

 }

但是当我使用 1 级或更高级别时的结果很奇怪。例如:

showMenu( 1 );

将退还我所有的项目,除了第一个项目。

4

2 回答 2

2
function showMenu( $level = 0 ) {

    $sql = "SELECT * FROM `menus` WHERE `submenu`=".$level;

    $result = mysql_query( $sql );

    echo "<ul>";
      $rows = "";
        while ( $node = mysql_fetch_array( $result ) ) {

            echo "<li>". $node['name'];

            $sql_ = "SELECT * FROM `menus` WHERE `submenu`=".$node['id'];

            $execute = mysql_query( $sql_ );

            $rows = mysql_num_rows($execute);
            if ( $rows>0 ) {

                showMenu( $node['id'] );

            }

            echo "</li>";

        }

    echo "</ul>";

 }
于 2013-08-26T09:45:10.213 回答
0

首先,我认为优秀的程序员从不复制和粘贴代码。它意味着失败。

这就是我认为你必须获得所有菜单(包括子菜单)的原因。这样更好,因为您只向 sql 发送一个数据包。

现在您已经拥有了对象中的所有菜单。(嘿,我们在 2013 年:使用mysqli面向对象)您可以在简单的天气语句中检查每次if以构建新<ul>标签。

希望能帮助到你。

于 2013-08-26T09:47:43.223 回答