Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyświetlanie tablicy
Forum PHP.pl > Forum > Przedszkole
misiek21
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
siemakuba
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.
misiek21
Sposób wysiwtlania podany przez siemakuba nie działa tak jak chciałem tylko co trzeci obiek czy drugi robi wiekrzy odstęp.
siemakuba
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.
misiek21
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
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.