PHP循环问题?

时间:2010-06-30 08:05:36

标签: php

我有这个脚本,每行最多显示5张图片,但由于某些原因,如果商品数量不是5的精确倍数,我的<ul>标签将无法正确关闭。我更正了这个问题,即使列出的图片数少于5,<ul>标记也会关闭?

这是我的PHP代码。

if (!$dbc) {
    print mysqli_error($mysqli);
} else {
    $row_count = 0;
    while($row = mysqli_fetch_array($dbc)){ 
        if($row_count % 5 == 0){
         echo "<ul>";
        }
       echo "<li><a href='" .$row["url"]. "' title='".$row['title']."'>";
        echo "<img src='".$row['src']."'></a></li>";
       if($row_count % 5 == 4) {
         echo "</ul>";
       }
       $row_count++;
    }

}

4 个答案:

答案 0 :(得分:3)

循环下方的

,检查是否

if (!$dbc) {
    print mysqli_error($mysqli);
} else {
    $row_count = 0;
    while($row = mysqli_fetch_array($dbc)){ 
        if($row_count % 5 == 0){
         echo "<ul>";
        }
       echo "<li><a href='" .$row["url"]. "' title='".$row['title']."'>";
        echo "<img src='".$row['src']."'></a></li>";
       if($row_count % 5 == 4) {
         echo "</ul>";
       }
       $row_count++;
    }
    if ( (($row_count % 5) > 0) && (($row_count % 5) < 4))
        echo "</ul>";
}

答案 1 :(得分:2)

$multiple = false;

if (!$dbc) {
    print mysqli_error($mysqli);
} else {
    $row_count = 0;
    while($row = mysqli_fetch_array($dbc)){ 
        if($row_count % 5 == 0){
         echo "<ul>";
        }
       echo "<li><a href='" .$row["url"]. "' title='".$row['title']."'>";
        echo "<img src='".$row['src']."'></a></li>";
       if($row_count % 5 == 4) {
         $multiple = true;
         echo "</ul>";
       } else {
        $multiple = false;
       }
       $row_count++;
    }
    if($multiple == false) {
        echo "</ul>";
    }

}

答案 2 :(得分:0)

if (!$dbc) {
print mysqli_error($mysqli);} else {
$row_count = 0;
//tank start
$total_rows = mysqli_num_rows($dbc);
//tank end
while($row = mysqli_fetch_array($dbc)){ 
    if($row_count % 5 == 0){
     echo "<ul>";
    }
   echo "<li><a href='" .$row["url"]. "' title='".$row['title']."'>";
    echo "<img src='".$row['src']."'></a></li>";
   //tank start
   if($row_count % 5 == 4 || $row_count==$total_rows) {
   //tank end
     echo "</ul>";
   }
   $row_count++;
}

答案 3 :(得分:0)

这是我更新的解决方案。我觉得它看起来更清晰一些。我设置了一些变量来摆脱一些IF语句,并用FOR循环替换它们。主要是为了可读性,这是我想到的方式。

$itemsperrow = 5;
$items = mysqli_num_rows($dbc);
$rows = $items / $itemsperrow;
$itemcount = 0;

if (!$dbc)
{
    echo(mysqli_error($mysqli));
}
else
{
    for ($int = 0; $int < $rows; $int++)
    {
        echo "<ul>";

        for ($item = 0; $item < $itemsperrow; $item++)
        {
            if ($itemcount >= $items)
            {
                echo "</ul>";
                exit;
            }
            else
            {
                $row = mysqli_fetch_array($dbc);
                echo "<li><a href='". $row["url"] . "'>";
                echo "<img src='" . $row["src"] . "' title='" . $row["title"] . "'/></a></li>";
                $itemcount++;
            }
        }
        echo "</ul>";        
    }
}