Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Wyświetlanie tablicy
misiek21
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.02.2007

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


Mam taki skrypt (czesc wykonawcza kodu)

  1. <?php
  2. for ($i=0;$i<=count($przedmioty['user'][$i]);$i++) {
  3.  
  4. $link = $przedmioty['user'][$i]['id'];
  5. $tytul = $przedmioty['user'][$i]['name'];
  6. $cena = $przedmioty['user'][$i]['price'];
  7. $ofert = $przedmioty['user'][$i]['count'];
  8. $czas = $przedmioty['user'][$i]['left'];
  9. {
  10. echo '<div id="panel">'.
  11. wordwrap($tytul, 45, '<br />').
  12. '<br />'.
  13. '<br />'.
  14. 'Cena: '. $cena, ' zł'.
  15. '<br />'.
  16. 'Ofert: '. $ofert.
  17. '<br />'.
  18. 'Do końca: '. secondToString( $czas ).
  19. '<br />'.
  20. '<br />'.
  21. '</div>';
  22. }
  23. ?>


Skrypt wyświetla wyniki z tablicy w postaci

tytul
cena
ofert
Do końca

i takie bloki wyświetla jedno pod drugim.

1. Jak zrobić aby wyświetlał jedno obok drugiego np. po 3 w rzędzie?
2. Jak zrobić aby wyświetlał losowo jeden taki blok?


-------------------
poprawiłem BBCode
php wstawiamy w PHP a nie w CODE
~Cienki1980
Go to the top of the page
+Quote Post
siemakuba
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


Po pierwsze, zapamiętaj na przyszłość: taka konstrukcja pętli for jak pokazałeś jest mało optymalna.
Drugi warunek w pętli sprawdzany jest za każdym jej przebiegiem, więc u ciebie za każdym razem wykonywana jest funkcja count, a jej wartość przecież nie zmienia się w trakcie działania pętli. Rozwiązanie: przypisz wynik działania tej funkcji do zmiennej, wystaw to przed pętlę lub do pierwszego warunku pętli a w drugim warunku korzystaj już ze zmiennej:

  1. <?php
  2. $n = count($przedmioty['user'][$i]);
  3. for ( $i=0; $i <= $n; $i++) {}
  4.  
  5. // lub
  6.  
  7. for ($i=0, $n = count($przedmioty['user'][$i]); $i <= $n; $i++) {}
  8. ?>



Cytat
1. Jak zrobić aby wyświetlał jedno obok drugiego np. po 3 w rzędzie?

Wewnątrz pętli wiesz który przebieg jest akurat wykonywany - masz to w zmiennej $i.
To, co musisz się dowiedzieć to czy aktualny przebieg jest "co trzecim" przebiegiem pętli, i wtedy wyświetlić np. <br> czy jakoś inaczej złamać wszystko do nowego wiersza. Czy dany przebieg jest co trzecim przebiegiem pętli możesz dowiedzieć się sprawdzając, czy reszta z dzielenia aktualnego przebiegu przez 3 daje 0:
  1. <?php
  2. if ($i % 3 == 0) {}
  3. ?>


Cytat
2. Jak zrobić aby wyświetlał losowo jeden taki blok?

array_rand" title="Zobacz w manualu PHP" target="_manual, rand" title="Zobacz w manualu PHP" target="_manual(0,count($array)-1);

pozdr.
Go to the top of the page
+Quote Post
misiek21
post
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.02.2007

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


Sposób wysiwtlania podany przez siemakuba nie działa tak jak chciałem tylko co trzeci obiek czy drugi robi wiekrzy odstęp.
Go to the top of the page
+Quote Post
siemakuba
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


Pokaż proszę jak to zaimplementowałeś. To, że nie działa tak jak chcesz jest możliwe, ale niemożliwe jest stwierdzenie dlaczego, skoro nic nie pokazałeś. Ręczę, że sposób jest dobry i można śmiało za jego pomocą zrobić to, co chcesz. Pokaż jak próbujesz to robić i co ci wychodzi.

pozdr.
Go to the top of the page
+Quote Post
misiek21
post
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.02.2007

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


Zrobiłem tak

  1. <?php
  2. for ($i=0, $n = count($przedmioty['user-item-list'][$i]); $i <= $n; $i++) {
  3.  
  4. if ($i%3==0)  { echo '<br />';}
  5.  
  6. $tytul = $przedmioty['user'][$i]['name'];
  7. $cena = $przedmioty['user'][$i]['price'];
  8. $ofert = $przedmioty['user'][$i]['count'];
  9. $czas = $przedmioty['user'][$i]['eft'];
  10.  
  11. echo '<div id="panel">';
  12. wordwrap($tytul, 45, '<br />').
  13. '<br />', '<br />'.
  14. 'Cena: '. $cena, ' zł'.
  15. '<br />'.
  16. 'Ofert: '. $ofert.
  17. '<br />'.
  18. 'Do końca: '. secondToString( $czas ).
  19. '</div>';
  20. }
  21. ?>


i dalej sie to wyswietla jedno pod drugim w nastepujący sposób:

tytuł
cena
ofert
do konca
tytuł
cena
ofert
do konca
tytuł
cena
ofert
do konca

tytuł
cena
ofert
do konca

a chciałem tak

tytuł tytuł
cena cena
ofert ofert
do konca do konca
tytuł tytuł
cena cena
ofert ofert
do konca do konca

Ten post edytował misiek21 26.02.2007, 23:53:59
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 22:39