2010-06-30 92 views
0

我有這個腳本,每行最多顯示5個圖像,但由於某種原因,如果項目數不是5的精確倍數,我的<ul>標記將無法正確關閉。如何糾正此問題即使列出的圖像數量少於5,<ul>標籤也會關閉?PHP循環問題?

這是我的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

*(TIPP)* ['printf'(http://de2.php.net/manual/en/function.printf.php)可以使你的代碼了很多更具可讀性 – Gordon 2010-06-30 08:11:10

+0

或者,做這個:'echo'

  • 「;' – Skilldrick 2010-06-30 08:12:47

    +0

    @Gordon print_f如何幫我解決這個問題? – sIK 2010-06-30 08:16:19

    回答

    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>"; 
        } 
    
    } 
    
    +0

    Krazy this code worked。Thanks! – sIK 2010-06-30 08:33:15

    +0

    歡迎你:D – Olorin 2010-06-30 14:28:03

    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>"; 
    } 
    
    +0

    恰好在循環下面? – sIK 2010-06-30 08:10:29

    +0

    低於「while」的結尾「}」,但當然在「else」語句代碼中。 我已經編輯了答案,以告訴你究竟在哪裏;) – migajek 2010-06-30 08:19:46

    +0

    這沒有工作:( – sIK 2010-06-30 08:21:38

    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++; 
    } 
    
    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>";   
        } 
    }