显示部分mysql_fetch_assoc()不同

时间:2014-08-03 17:00:29

标签: php

在我的网站上,顶部有一个菜单。这仅适用于5个菜单选项,但有时还有更多。这取决于从数据库中获取的内容。对于5个或更少的选项,它可以显示如下:

<ul>
    <li>First option</li>
    <li>Second option</li>
    <li>Third option</li>
    <li>Fourth option</li>
    <li>Fifth option</li>
</ul>

如果有超过5个选项,则应显示如下:

<ul>
    <li>First option</li>
    <li>Second option</li>
    <li>Third option</li>
    <li>Fourth option</li>
    <li>Misc.
        <ul>
            <li>Fifth option</li>
            <li>Sixth option</li>
            <li>Seventh option</li>
        </ul>
    </li>
</ul>

这是PHP代码,我有:

$result = //the query;
$numberOfRows = mysql_num_rows($result);
if ($numberOfRows > 5) {
    $i = 1;
    while($row = mysql_fetch_assoc($result)) {
        while ($i < 5) {
            //the part I don't get
        }
    }
} else {
    while($row = mysql_fetch_assoc($result)) {
        echo "<li>".$row['page']."</li>";
    }

}

4 个答案:

答案 0 :(得分:0)

您需要尝试以下操作:

while($row = mysql_fetch_assoc($result) && $i < 5) {
    //your logic
    $i++;
}

答案 1 :(得分:0)

试试这个:

$result = //the query;
$MAX_NUMBER = 5;
$count = 0;
$totalRows = mysql_num_rows($result);
while($row = mysql_fetch_assoc($result)){
    $count++;
    if($totalRows > $MAX_NUMBER && $count == $MAX_NUMBER){echo "<li><ul>Misc.";}
    echo "<li>".$row['page']."</li>";
}
if($totalRows > $MAX_NUMBER){echo "</ul></li>";}

答案 2 :(得分:0)

像这样:

$numberOfRows = mysql_num_rows($result);

$i = 1;

while($row = mysql_fetch_assoc($result)) {

if($i==5) {
       echo "<li>Misc.<ul><li>".$row['page']."</li>";

      $i++;
      continue;
    }
    echo "<li>".$row['page']."</li>";
    $i++;
}

echo "</ul></li>";

答案 3 :(得分:0)

通常我会将所有内容转储到数组$data[]中并进行处理。 (当我编写简单的代码块并将它们拼接在一起时,维护更容易)。这是代码片段: -

while($row = mysql_fetch_assoc($result))
{
    $data[] = $row;
}

接下来,在避开$data[]的同时处理while。恕我直言,太多嵌套while循环令人困惑,请尝试使用foreach()

if (sizeof($data) <= 5) {
    // print simple <ul>
} else {
    // Step1: print 4 rows with foreach() 
    // Step2: print ".misc" + extra UL & LI tags
    // Step3: print 5th row onwards, foreach() again
    // Step4: closing UL & LI tags.
}