我是初学者,我正在尝试制作一个简单的带有下拉菜单的导航菜单,但是当嵌套循环完成时,第一个循环停止。有什么建议吗?请分析,因为我的编程技能低。
<?php
function nav_main($dbc, $path) {
$q = "SELECT * FROM navigation ORDER BY position ASC";
$r = mysqli_query($dbc, $q);
while($nav = mysqli_fetch_assoc($r)) {
$nav['slug'] = get_slug($dbc, $nav['url']);
if($nav['parent_id'] == 0) {
?>
<li<?php selected($path['call_parts'][0], $nav['slug'], ' class="active"') ?>><a href="<?php echo $nav['url']; ?>"><?php echo $nav['label']; ?></a></li>
<?php
}
elseif ($nav['parent_id'] == 1) {
?>
<li class="dropdown<?php selected($path['call_parts'][0], $nav['slug'], ' active"') ?>"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><?php echo $nav['label']; ?><span class="caret"></span></a>
<ul class="dropdown-menu">
<?php
while($subnav = mysqli_fetch_assoc($r)) {
$subnav['slug'] = get_slug($dbc, $subnav['url']);
if($subnav['parent_id'] == 3) {
?>
<li><a href="<?php echo $subnav['url']; ?>"><?php echo $subnav['label']; ?></a></li>
<li role="separator" class="divider"></li>
<?php
}
}
?>
</ul>
</li>
<?php
}
}
}
?>
两个while
循环都在处理相同的结果集!
因此,很明显,当第二个 while 循环结束时,结果集被完全消耗,并且没有任何东西留给外部 while 看起来要做但终止。
这是您正在做的事情的精确:-
$q = "SELECT * FROM navigation ORDER BY position ASC";
$r = mysqli_query($dbc, $q);
// first while loop
while($nav = mysqli_fetch_assoc($r)) {
// inner while loop
while($subnav = mysqli_fetch_assoc($r)) {
两者都使用 $r
,因此无论您使用不同的变量来保存返回的行数据,内部循环都将消耗与外部 while 循环中正在处理的结果集相同的结果集的行2->end