Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 分层菜单中的奇怪行为?_Php_Menu_Nested_Hierarchical - Fatal编程技术网

Php 分层菜单中的奇怪行为?

Php 分层菜单中的奇怪行为?,php,menu,nested,hierarchical,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>

功能很简单:

 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>";

 }
将返回除第一个项目以外的所有项目。

功能显示菜单($level=0){
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>";

 }
$sql=“从`菜单'中选择*,其中`子菜单`=”$level; $result=mysql\u查询($sql); 回声“
    ”; $rows=“”; 而($node=mysql\u fetch\u array($result)){ echo“
  • ”$node['name']; $sql=“从`菜单'中选择*,其中`子菜单`=”$node['id']; $execute=mysql\u查询($sql\u); $rows=mysql\u num\u rows($execute); 如果($rows>0){ showMenu($node['id']); } 回声“
  • ”; } 回声“
”; }
首先,我认为优秀的程序员从不复制和粘贴代码。它注定要失败

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

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


希望有帮助。

天哪。你写那个函数了吗?不,是在stackoverflow上,但我不记得在哪里。我知道它已经过时了('cause PDO etc.),但很有趣。这是一个非常好的递归函数,多个数据包,我不推荐使用。我仍然很困惑,level=0的第一个元素丢失了。如果($level==0){$sql=“SELECT*FROM
菜单
其中
子菜单
='0'”}或者{“从
菜单
中选择*其中
子菜单
=”$level;}可以发布数据库结构吗?
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>";

 }