开发者

How to add a seperator between menu items in PHP but not on the end

I'm trying to put an image as a separator between menu items but not on the outside and I'm not sure how to do this.. So it would end up being something like this:

HOME | ABOUT | CONTACT

unfortunately my code puts one after every entry including the last one.

mys开发者_运维问答ql_select_db($database_db_connection, $db_connection);
$query_rsMenu = "SELECT * FROM menu WHERE online = 1 ORDER BY position ASC";
$rsMenu = mysql_query($query_rsMenu, $db_connection) or die(mysql_error());

echo "<ul class='MenuBarVertical'>\n";
    while($row_rsMenu = mysql_fetch_assoc($rsMenu)) {
    echo ("   <li><a href=\"../" . $row_rsMenu['menuURL'] . "\">" . $row_rsMenu['menuName'] . "</a> <img src='SiteFiles/Site/separator.jpg' /> </li>\n");
    }
echo "</ul>\n";

mysql_free_result($rsMenu);

Thanks


You could also build an array and use implode when you print it out. This also separates the database model from the view a little better.

mysql_select_db($database_db_connection, $db_connection);
$query_rsMenu = "SELECT * FROM menu WHERE online = 1 ORDER BY position ASC";
$rsMenu = mysql_query($query_rsMenu, $db_connection) or die(mysql_error());

$array = array();
while($row_rsMenu = mysql_fetch_assoc($rsMenu)) {
    $array[] = "<li><a href=\"../" . $row_rsMenu['menuURL'] . "\">" . $row_rsMenu['menuName'] . "</a></li>\n";
}

mysql_free_result($rsMenu);

echo "<ul class='MenuBarVertical'>\n";
echo implode(' <img src="SiteFiles/Site/separator.jpg" /> ', $array);
echo "</ul>\n";

Of course the tags end up between the li instead of inside, but since you are making the li inline I think it will work.


The easy solution is to special case either the last iteration or the first one. The first one is usually easier: set $first = true outside the loop, inside the loop: if (!$first) { print 'separator'; }.


$count = 0;
$dbRows = mysql_num_rows($rsMenu);
while($row_rsMenu = mysql_fetch_assoc($rsMenu)) {
    $count++;
    echo ("   <li><a href=\"../" . $row_rsMenu['menuURL'] . "\">" . $row_rsMenu['menuName'];
    if($count < $dbRows)
      echo ("</a> <img src='SiteFiles/Site/separator.jpg' /> </li>\n");
    }


You could use mysql_num_rows() to get the number of rows from the result set, and build some logic against the result.


Yet another answer :

for ($i = 1; $i <= mysql_num_rows($rsMenu); $i++) {

  $row_rsMenu = mysql_fetch_assoc($rsMenu);
  // do something;

  if ($i == mysql_num_rows($rsMenu) - 1) {
    // this is the last element, do something;
  }

}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜