Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][HTML]Pętla for i Tabela HTML
maly_pirat
post 26.02.2010, 11:09:04
Post #1





Grupa: Zarejestrowani
Postów: 215
Pomógł: 0
Dołączył: 13.06.2007

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
thek
post 26.02.2010, 11:21:15
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Modulo smile.gif


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
MateuszS
post 26.02.2010, 13:30:07
Post #3





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

Ostrzeżenie: (0%)
-----


  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

Ten post edytował MateuszScirka 26.02.2010, 14:02:13


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
thek
post 26.02.2010, 13:59:13
Post #4





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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

Ten post edytował thek 26.02.2010, 14:00:00


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
muniekw
post 26.02.2010, 14:19:13
Post #5





Grupa: Zarejestrowani
Postów: 243
Pomógł: 22
Dołączył: 1.06.2009
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.

Ten post edytował muniekw 26.02.2010, 14:20:36
Go to the top of the page
+Quote Post
mortus
post 26.02.2010, 15:29:52
Post #6





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował mortus 26.02.2010, 14:57:02
Go to the top of the page
+Quote Post
Gumiak
post 21.07.2010, 12:40:32
Post #7





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 29.04.2003
Skąd: Stargard Szczeciński

Ostrzeżenie: (0%)
-----


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. ?>


--------------------
gg 1142714
Go to the top of the page
+Quote Post
thek
post 21.07.2010, 13:05:43
Post #8





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Gumiak
post 21.07.2010, 13:16:45
Post #9





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 29.04.2003
Skąd: Stargard Szczeciński

Ostrzeżenie: (0%)
-----


jak ktos jest poczatkujacy to kombinuje i kombinuje, a jak nie wychodzi to prosi o pomoc tongue.gif


--------------------
gg 1142714
Go to the top of the page
+Quote Post
thek
post 21.07.2010, 13:25:05
Post #10





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.04.2025 - 07:59