分层菜单中的奇怪行为?

时间:2013-08-26 09:34:41

标签: php menu nested hierarchical

功能很简单:

 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 );
除了第一件商品外,

会将所有商品退回给我。

2 个答案:

答案 0 :(得分: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>";

 }

答案 1 :(得分:0)

首先,我认为伟大的程序员永远不会复制和粘贴代码。它意味着失败。

为什么我认为你必须获得所有菜单(包括子菜单)。它更好,因为你只发送一个数据包到sql。

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

希望它有所帮助。