首先while循环在第二个while循环结束时停止

时间:2016-03-01 13:51:25

标签: php

我是初学者,我尝试使用下拉列表创建一个简单的导航菜单,但第一个循环在嵌套循环完成时停止。有什么建议吗?由于编程技巧低,请分析。

<?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 
         } 
     } 
}  
?>

1 个答案:

答案 0 :(得分:0)

您的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,因此无论您使用不同的变量来保存返回的行数据,内部循环都将使用与外部处理相同的结果集的行2->end。环