Цикл while, оператор для любого другого цикла? - PullRequest
1 голос
/ 09 сентября 2011

У меня есть цикл while, и каждый из них отображает <li></li> в списке, есть ли способ сообщить php, что каждый второй цикл должен отображаться как:

<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>';
 }

Он находится в функции намин, в основном каждая строка должна иметь другой фон:)

Ответы [ 4 ]

3 голосов
/ 09 сентября 2011

Или еще лучше

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

Затем поместите цвета в таблицу стилей - у вас есть преимущество, вы можете даже изменить шрифты и т. Д. Вы даже можете придать ему новый вид, не меняя код

3 голосов
/ 09 сентября 2011

Вы хотите, чтобы все четные значения отображали что-то еще; это будет сделано с помощью оператора по модулю:

$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 уже определен.

2 голосов
/ 09 сентября 2011

Вы можете использовать логический флаг, чтобы отслеживать, является ли он нечетным или четным, то есть

$isOdd = true;
while(...){
  if($isOdd) echo '<li style="background: #222;"></li>';
  else echo '<li></li>';
  $isOdd = ! $isOdd;
}
0 голосов
/ 09 сентября 2011

Вы можете сделать что-то вроде следующего:

$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>';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...