[PHP] Jak automatycznie pokolorować na przemian wiersze tabeli, aby była bardziej czytelna?
Chcesz pokolorować na przemian wiersze w tabeli np. biały - szary - biały - szary. Dzięki takiemu rozwiązaniu duże tabele stają się bardziej czytelne dla użytkownika i nie męczą wzroku.
Poniższy przykład pozwala automatycznie pokolorować tabelę dowolną ilością kolorów, nie tylko dwoma. Możliwe jest więc kolorowanie np. biały - szary - czerwony - zielony - biały - szary - czerwony - itd. Można w ten sposób kolorować również np. tylko co dziesiąty wiersz...
<?
$pola[]="pole 1";
$pola[]="pole 2";
$pola[]="pole 3";
$pola[]="pole 4";
$pola[]="pole 5";
$pola[]="pole 6";
$pola[]="pole 7";
echo "<table border=1 width=200>";
for ($i=0;$i<count($pola);$i++) {
$l++;
if ($l==1) { $bg = "#eeeeee"; }
if ($l==2) { $bg = "yellow"; }
if ($l==3) { $bg = "#ccccff"; $l=0; }
echo "<tr bgcolor=$bg><td>".$pola[$i]."</td></tr>";
}
echo "</table>";
?>
przykładowa tabela:
pole 1 |
pole 2 |
pole 3 |
pole 4 |
pole 5 |
pole 6 |
pole 7 |
Pętla for() wykonuje się tyle razy ile mamy zadeklarowanych wierszy tabeli. Zmienna $l służy do obsługi kolorów. Już na starcie ma wartość 1, więc przyjmuje kolor szary (#eeeeee). Po drugiej pętli przyjmuje wartość 2 i ustawiany jest kolor żółty (yellow). Za trzecim razem ustawiany jest ostatni kolor, a zmienna $l jest zerowana.
Cykl się powtarza, co zapewnia łatwe i szybkie kolorowanie poszczególnych wierszy tabeli. Ilość kolorów można łatwo zwiększyć lub zmnijeszyć, musisz tylko pamiętać, aby ostatni kolor zerował zmienną $l.
Możliwości cyklicznego kolorowania jest wiele. Można w ten sposób kolorować np. tylko co trzeci wiersz, wystarczy zmodyfikować nieco pętlę:
<?
for ($i=0;$i<count($pola);$i++) {
$l++;
if ($l==3) {$bg="#eeeeee"; $l=0;} else {$bg="";}
echo "<tr bgcolor=$bg><td>".$pola[$i]."</td></tr>";
}
?>
Jeżeli masz nowszą wersję PHP (4.0.0 i wyższą) możesz znacznie ulepszyć procedurę kolorowania wykorzystując rotację tablicy kolorów:
<?
$pola[]="pole 1";
$pola[]="pole 2";
$pola[]="pole 3";
$pola[]="pole 4";
$pola[]="pole 5";
$pola[]="pole 6";
$pola[]="pole 7";
$kolory[]="#eeeeee";
$kolory[]="yellow";
$kolory[]="#ccccff";
echo "<table border=1 width=200>";
for ($i=0;$i<count($pola);$i++) {
$bg=array_shift($kolory);
array_push($kolory, $bg);
echo "<tr bgcolor=$bg><td>".$pola[$i]."</td></tr>";
}
echo "</table>";
?>
Funkcja array_shift() pobiera i kasuje pierwszy element tablicy, przemieszczając pozostałe elementy na początek. Z kolei array_push() umieszcza na końcu tablicy pobraną wartość. W ten sposób tablica ładnie rotuje i sama "dostarcza" cyklicznych kolorów do wypełnienia tabeli.