Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][HTML]Pętla for i Tabela HTML
Forum PHP.pl > Forum > Przedszkole
maly_pirat
Cześć.

W jaki sposób skonfigurować pętlę for, aby po 3 rekordzie tworzyło nową komórkę tabeli (<tr>...</tr>) ?
Np. pętla przetwarza 9 wyników więc tabela HTML uformuje się w następujący sposób:
Kod
1 2 3
4 5 6
7 8 9


Oczywiście każda liczba to oddzielna komórka TD.
thek
Modulo smile.gif
MateuszS
  1. //np tak
  2. $i=0;
  3. for($a=1; $a<$czegos; $a++) {
  4. if($i==3) { echo "</tr><tr>"; $i=0; }
  5. echo $a;
  6. $i++;
  7. }
  8.  
  9.  

poza tym bylo ;p
thek
To powiedz mi Mateusz jak w Twoim wypadku zachowa się skrypt w przypadku 6 elementów, bo jak dla mnie zrobi:
1 2
3 4 5
6
a to raczej mały bajzel winksmiley.jpg Przy numeracji od 0 z kolei zrobi jeden pusty wiersz tabeli smile.gif If musi być 2-członowy. Po pierwsze dodawać "łamanie" dopiero po osiągnięciu 3 elementu (licząc od zera $a%3 == 0, a w przypadku startu od 1 ma być $a%3 == 1), a po drugie $a musi być większe od wartości modulo, czyli $a > 3 smile.gif
muniekw
Proponuję coś takiego:

  1. for($a=1; $a<10; $a++)
  2. {
  3. echo $a;
  4. if ($a%3==0 )
  5. echo "<br>";
  6. }


Teraz zauważyłem, że to nie do końca tak jak trzeba miało być ale może się przyda.
mortus
A nie tak?
  1. <?php
  2. $liczba = 9;
  3. echo '<table><tr>';
  4. for ($i = 0; $i < $liczba; $i++) {
  5. if ($i % 3 == 0 && $i != 0) {
  6. echo '</tr><tr>';
  7. }
  8. echo '<td>'.($i+1).'</td>';
  9. }
  10. echo '</tr></table>';
  11. ?>
Tyle, że taki kod działa prawidłowo tylko dla zmiennej $liczba, która jest wielokrotnością liczby 3. Np. dla 8 tabela się posypie w ostatnim rzędzie!
EDIT:
Stosowanie takiej pętli należy zatem uzależnić od wprowadzanych danych!

Bardziej uniwersalny kod, który dopełnia ostatni wiersz komórkami z - i działa dla dowolnej liczby i dowolnej liczby komórek w wierszu:
  1. <?php
  2. $liczba = 13;
  3. $liczb_w_wierszu = 3;
  4. echo '<table><tr>';
  5. for ($i = 0; $i < $liczba; $i++) {
  6. if ($i % $liczb_w_wierszu == 0 && $i != 0) {
  7. echo '</tr><tr>';
  8. }
  9. echo '<td>'.($i+1).'</td>';
  10. }
  11. for($i = 0; $i < $liczb_w_wierszu - $liczba%$liczb_w_wierszu; $i++) {
  12. echo '<td>-</td>';
  13. }
  14. echo '</tr></table>';
  15. ?>
Gumiak
kurcze, a moze ktos pomoze jak to przerobic zeby wyswietlalo mi mysqlowe wyniki, bo tak jak teraz to mi zapetla sie pare razy w srodku, a jak wyjde z petla mysqla "wyzej" to nie dziala prawidlowo.

dorzucilem kawalek od $this->kategorie as $kategorie

  1. <?php
  2. $liczba = $this->count;
  3. $liczb_w_wierszu = 3;
  4. echo '<table><tr>';
  5. for ($i = 0; $i < $liczba; $i++) {
  6. if ($i % $liczb_w_wierszu == 0 && $i != 0) {
  7. echo '</tr><tr>';
  8. } ?>
  9.  
  10. <? foreach ($this->kategorie as $kategorie) { ?>
  11. <a href="/<?= $this->locale()->getLanguage(); ?>/produkty/podkategorie/id/<?= $kategorie->kat_id ?>"><img src="<?php echo $this->base_url ?>/public/image/kategorie/<?= $kategorie->kat_id ?>.jpg" border="0" alt="<?= $kategorie->kat_nazwa ?>"></a>
  12. <?php } ?>
  13.  
  14. <? }
  15. for($i = 0; $i < $liczb_w_wierszu - $liczba%$liczb_w_wierszu; $i++) {
  16. echo '';
  17. }
  18. echo '</tr></table>';
  19. ?>
thek
To ja zapytam: "WTF?" Robisz 3 komórki w każdym z ceil($liczba/3) wierszy i każda komórka wyświetla wszystko co w foreach, a potem dopycha 3 minus reszta z modulo3 nic nie wyświetlających echo. Dziwisz się nadal? Wcale nie łączysz wyświetlania linków z obrazkami z licznikiem pętli for. Musisz zamiast całość do for wrzucać, użyć dobrze skonstruowanego foreach jedynie.
Gumiak
jak ktos jest poczatkujacy to kombinuje i kombinuje, a jak nie wychodzi to prosi o pomoc tongue.gif
thek
To podpowiem algorytmem...
1. Masz licznik pętli wyzerowany.
2. Robisz pętlę foreach
3. Wewnątrz pętli sprawdzasz, czy licznik_pętli%3 jest równy 0 i jest różny od 0(eliminować musimy pierwszy przebieg). Jeśli tak -> robisz zamknięcie wiersza i otwierasz nowy
4. Wypisujesz link objęty znacznikami TD
5. Inkrementujesz licznik o 1
6. Pętla wraca do punktu 3 i lata aż do końca danych.
7. Poza pętlą sprawdzasz czy licznik%3 jest 0
8. Jeśli tak - koniec
9. Jeśli nie to robimy 3- licznik%3 pustych komórek.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.