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