2011-09-09 67 views
0

我有一個while循環,並在列表中每一個顯示<li></li>,有沒有辦法告訴PHP其他每個迴路應附和說:while循環,每個其他循環的語句?

<li style="background: #222;"></li> 

,並在我的CSS我將有另一種顏色#111設置爲默認值,以便我的網站用戶可以輕鬆地確定他們正在查看哪一行數據?

我的請求代碼:

function user_details($dbc, $q, $details) { 
echo '<ul class="userlist">'; 
while ($user = $q -> fetch(PDO::FETCH_ASSOC)) { 

    echo '<li><span>(' . $user['id'] . ')</span> <a href="/viewaccount?id=' . $user['id'] . '">' . $user['username'] . '</a><div>'; 

    if ($user['admin'] > 0) { 
     echo '<img class="Tooltip" src="gameimages/admin.png" width="18" height="18" title="Is game admin." alt="" />'; 
    } 

    echo '<img class="Tooltip" src="gameimages/' . $user['gender'] . '.png" width="18" height="18" title="' . $user['gender'] . '" alt="" />'; 

    $last_active = time() - $user['last_active']; 
    $seconds = $last_active % 60; 
     $minutes = ($last_active - $seconds)/60; 
    if ($minutes <= 4) { 
    echo '<img class="Tooltip" src="gameimages/active5.png" width="18" height="18" alt="" title="'; 
     if ($seconds == 0) { 
      echo 'Last active ' . $minutes . ' minutes ago." />'; 
     } 
     elseif ($minutes == 0) { 
      echo 'Last active ' . $seconds . ' seconds ago." />'; 
     } 
     else { 
      echo 'Last active ' . $minutes . ' minutes and ' . $seconds . ' seconds ago." />'; 
     } 
    } 
    elseif ($minutes <= 9) { 
     echo '<img class="Tooltip" src="gameimages/active10.png" width="18" height="18" alt="" title="'; 
     if ($seconds == 0) { 
      echo '<strong>Last active ' . $minutes . ' minutes ago." />'; 
     } 
     else { 
      echo 'Last active ' . $minutes . ' minutes and ' . $seconds . ' seconds ago." />'; 
     } 
    } 
    elseif ($minutes <= 14) { 
     echo '<img class="Tooltip" src="gameimages/active15.png" width="18" height="18" alt="" title="'; 
     if ($seconds == 0) { 
      echo 'Last active ' . $minutes . ' minutes ago." />'; 
     } 
     else { 
      echo 'Last active ' . $minutes . ' minutes and ' . $seconds . ' seconds ago." />'; 
     } 
    } 

    if ($user['subscriber'] > 0) { 
     echo '<img class="Tooltip" src="gameimages/subscriber.png" width="18" height="18" title="Subscriber with ' . $user['subscriber'] . ' days left." alt="" />'; 
    } 

    echo '</div>'; 

    echo '<a href="#"><img class="Tooltip" src="gameimages/sendmessage.png" width="18" height="18" title="Send ' . $user['username'] . ' a message." alt="" /></a>'; 

    $is_friend = $dbc -> prepare("SELECT id, friend_id FROM friends WHERE id = ? && friend_id = ?"); 
    $is_friend -> execute(array($details['id'], $user['id'])); 
    $friend_request = $dbc -> prepare("SELECT id, id_to FROM friend_requests WHERE id = ? || id_to = ? && id = ? || id_to = ?"); 
    $friend_request -> execute(array($user['id'], $details['id'], $details['id'], $user['id'])); 
    if ($is_friend -> rowCount() > 0) { 
     echo '<img class="Tooltip" src="gameimages/isfriend.png" width="18" height="18" title="Friend request sent to ' . $user['username'] . '." alt="" />'; 
    } 
    elseif ($friend_request -> rowCount() > 0) { 
     echo '<img class="Tooltip" src="gameimages/friendrequested.png" width="18" height="18" title="There is a request pending to be friends with ' . $user['username'] . '." alt="" />'; 
    } 
    else { 
     echo '<a href="/confirm?action=addfriend&amp;id=' . $user['id'] . '"><img class="Tooltip" src="gameimages/addfriend.png" width="18" height="18" title="Add ' . $user['username'] . ' as a friend." alt="" /></a></li>'; 
    } 
} 
echo '</ul>'; 
} 

它是在最小的功能,基本上互相行應該有另一個背景:)

+1

我已經讀了兩遍 - 這個問題到底是什麼? –

+1

你能告訴我們你的while循環嗎? – TJHeuvel

+0

現在編輯它? – carlgcode

回答

1

你可以使用一個布爾標誌跟蹤是奇數還是偶數行,即

$isOdd = true; 
while(...){ 
    if($isOdd) echo '<li style="background: #222;"></li>'; 
    else echo '<li></li>'; 
    $isOdd = ! $isOdd; 
} 
+0

這工作完全謝謝很多:)請你解釋你的答案是什麼在這裏實際發生,所以我可以學習這種技術,如果你有時間,謝謝:) – carlgcode

+0

那麼,它非常簡單 - '$ isOdd'是一個初始化爲'true'的布爾變量,在循環結束時,它將它的值在'true'和'false'之間切換('$ isOdd =!$ isOdd;'語句,它讀取'$ isOdd = not $ isOdd',即它在真與假之間循環)。 – ain

+0

感謝幫助我很多 – carlgcode

2

你希望所有偶數值到別的顯示一些;這會做,使用模運算符:

$index = 0; 
while($user = $q->fetch(PDO::FETCH_ASSOC)) 
{ 
    if(++$index%2 == 0) //is index +1 even? 
    echo '<li style="background: #222;"></li>'; 
    else 
    echo '<li></li>'; 
} 

如果可能的話,你可以改變一個for循環,因爲你有你的$index已定義。

0

你可以做類似如下:

$colors = array('111', '222'); 
$i = 0; 
while (...) { 
    echo '<li style="background: #' . $colors[$i % count($colors)] . '"></li>'; 
    $i++; 
} 

對於整潔,你也可以把你的while環路成for循環。例如:

$colors = array('111', '222'); 
for ($i = 0; ...; $i++) { 
    echo '<li style="background: #' . $colors[$i % count($colors)] . '"></li>'; 
} 
+0

你爲什麼要計算每個循環中的數組內容? PHP沒有線程化,所以在循環執行期間你的數組不會被更新,直到你從循環中添加數據爲止。如果你的陣列很大,這會傷害... –

2

或者更好的

$isOdd = true; 
while(...){ 
    echo '<li class="' . ($isodd ? 'odd' : 'even'). '"></li> 
    $isOdd = ! $isOdd; 
} 

然後把顏色成樣式表 - 它有你甚至可以改變字體的優點等等。你甚至可以給它一個新的外觀而不需要更改代碼

+0

非常好:)沒有想到這個;) – carlgcode

+0

如果你很聰明 - 在口袋裏有一個CSS - 你可以在6秒內上升 –