2010-05-08 100 views
0

我試圖顯示第一行中的一種顏色和第二行中的另一種顏色,但我的代碼顯示兩種顏色的結果兩次例如讓我說我有5個結果我的代碼將顯示10個結果加倍結果。我該如何解決這個問題?PHP循環問題?

這裏是php代碼。

while ($row = mysqli_fetch_assoc($dbc)) { 
    //first row 
    echo '<h3 class="title"><a href="#" title="">' . $row['title'] .'</a></h3>'; 
    echo '<div class="summary"><a href="#" title="">' . substr($row['content'],0,255) . '</a></div>'; 

    //second row 
    echo '<h3 class="title-2"><a href="#" title="">' . $row['title'] .'</a></h3>'; 
    echo '<div class="summary-2"><a href="#" title="">' . substr($row['content'],0,255) . '</a></div>'; 

} 
+2

完全刪除第二行!你不需要它,它是一個循環! – 2010-05-08 12:47:07

+0

但我想以不同的顏色顯示第二行,而不會使結果加倍。 – NeVeR 2010-05-08 12:48:44

+0

看到我的更新只是一個做斑馬效果的線! – 2010-05-08 13:11:38

回答

2

你的代碼應該是這樣的

CSS

.odd { background: #CCC } 
.event { background: #666 } 

PHP

$c = true; 
    while ($row = mysqli_fetch_assoc($dbc)) { 
    $style = (($c = !$c)?' odd':' even');  
    echo '<h3 class="title '.$style.'"><a href="#" title="">' . $row['title'] .'</a></h3>'; 
    echo '<div class="summary '.$style.'"><a href="#" title="">' .substr($row['content'],0,255) . '</a></div>'; 

} 
+0

但我如何顯示不同顏色的第二行? – NeVeR 2010-05-08 12:50:42

+0

查看更新! – 2010-05-08 13:12:32

0

你的代碼只是顯示每個結果的兩倍。使用條件(例如整數或布爾值)在行之間切換(如:如果爲true,則爲綠色;如果爲false,則爲紅色)。

對於一個布爾值,你可以改變,像這樣的電流值:

bool = !bool; 
+0

'bool =!bool'。 – nickf 2010-05-08 13:01:34

+0

謝謝。來自java ... – 2010-05-08 13:04:55

4

你需要改變各行上類:

$count = 0; 

while ($row = mysqli_fetch_assoc($dbc)) { 

    if($count % 2 == 0) { 
     $classMod = ''; 
    } else { 
     $classMod = '-2'; 
    } 

    //first row 
    echo '<h3 class="title' . $classMod . '"><a href="#" title="">' . $row['title'] .'</a></h3>'; 
    echo '<div class="summary' . $classMod . '"><a href="#" title="">' . substr($row['content'],0,255) . '</a></div>'; 

    $count++; 
} 
+0

'$ count%2 == 0' for if?確實是 – svens 2010-05-08 12:56:09

+0

!更新。 – Andy 2010-05-08 12:57:47

0
$i = 0; 
while ($row = mysqli_fetch_assoc($dbc)) { 
    $color =$i % 2; 
    echo '<h3 class="title-' .$color . '"><a href="#" title="">' . $row['title'] .'</a></h3>'; 
    echo '<div class="summary"><a href="#" title="">' . substr($row['content'],0,255) . '</a></div>'; 
    $i++; 
} 
1

這裏的以重複最小的解決方案:

$count = 0; 
while (($row = mysqli_fetch_assoc($dbc)) && ++$count) { 
    printf(
     '<h3 class="title%1$s"><a href="#" title="">%2$s</a></h3>' 
     . '<div class="summary%1$s"><a href="#" title="">%3$s</a></div>' 
     , $count % 2 ? "" : "-2" 
     , $row['title'] // might want to use htmlentities() here... 
     , substr($row['content'], 0, 255) // and here... 
    ); 
} 
-1

IMO,th因爲沒有將這種非關鍵的表示層裝飾委託給客戶端代碼的藉口。

只需使用像jQuery庫並訪問像這樣的奇數和偶數行:

<script> 
$(document).ready(function() 
{ 

    //for your table rows 
    $("tr:even").css("background-color", "#F4F4F0"); 
    $("tr:odd").css("background-color", "#EFF1F2"); 
}); 
</script> 

你讓我們產生下一個字體標記。

0

夫婦的加分:

  • 你不(通常)需要這麼多類。如果您有<div class="stripe">作爲您的容器,則可以使用例如​​在CSS中。
  • 如果您使用​​定位CSS中的奇數和偶數項目,則可以覆蓋奇數項。
  • 在一個完美的世界中,你應該保持在CSS中的演示文稿。所有瀏覽器,但IE7和以下支持div:odd針對父母的任何奇怪的孩子。這可能需要稍微改變HTML的結構。對於IE7及以下版本,我會使用JavaScript而不是PHP來添加類。當IE7不再那麼你可以刪除JS。
0

順便說一句,你可以這樣做太代碼:

while ($row = mysqli_fetch_assoc($dbc)) { 
    echo '<h3 class="title"><a href="#" title="">' . $row['title'] .'</a></h3>'; 
    echo '<div class="summary"><a href="#" title="">' . substr($row['content'],0,255) . '</a></div>'; 

    if($row = mysqli_fetch_assoc($dbc)){ 
     echo '<h3 class="title-2"><a href="#" title="">' . $row['title'] .'</a></h3>'; 
     echo '<div class="summary-2"><a href="#" title="">' . substr($row['content'],0,255) . '</a></div>'; 
    } 
}