Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyświetlanie wszystkich wartości z arraya korzystając z foreacha
Forum PHP.pl > Forum > PHP > Object-oriented programming
faramka
Witam,

Mam taki kod (w widoku):

  1. {foreach=$godzinyWizyt; godzina; minutyWizyt}
  2. <tr>
  3. <th>{@godzina}</th>
  4. {foreach=@minutyWizyt; minuta; czyDostepne}
  5. <td {if not @czyDostepne}class="zajete"{/if}>
  6. {if @czyDostepne}<input type="radio" name="godzina"
  7. value="{@godzina}:{@minuta}" />{/if}
  8. </td>
  9. {/foreach}
  10. </tr>
  11. {/foreach}


(te klamerki to szablon OPT)

Otóż potrzebuję teraz dopisać kod (w kontrolerze), który sprawi, że powyższy kod wyświetli mi na stronie w przeglądarce tabelkę:
pierwsza kolumna: to godziny wizyt (wartości pobierane z bazy poprzez odpowiednie zapytanie);
kolejne kolumny: to minuty wizyt.
Jeśli w danej godzinie lekarz może przyjmować co 15min, to tych kolumn "minuty wizyt" będzie 4 (bo 60/15=4).
Opisowo: jest sobie lekarz, który dzisiaj przyjmuje od 10 do 15 (czyli ma być 5 wierszy - 10, 11, 12, 13, 14). Wizyta u niego trwa 15min (więc nagłówki kolumn przyjmują wartości 0-15, 15-30, 30-45, 45-60).
Ostatecznie powstanie tabelka 5x4, czyli posiadająca 20 komórek.

Wartość w drugim foreachu czyDostepne przekazuje informację, czy dana godzina jest wolna (wtedy rysuje radiobuttona i daje możliwość rejestracji wizyty), natomiast w przeciwnym wypadku kropki nie ma (zastosowany jest styl zmieniający tło komórki na czerwony).


Kod, który mam napisać trzeba ogarnąć arrayami.
Poniższy kod (wartości wpisane na sztywno) dają zamierzony rezultat:

  1. $godzinyWizyt = array(
  2. 10 => array(0 => true, 15 => false, 30 => true, 45 => false),
  3. 11 => array(0 => false, 15 => false, 30 => true, 45 => false),
  4. 12 => array(0 => false, 15 => true, 30 => true, 45 => true),
  5. 13 => array(0 => true, 15 => true, 30 => true, 45 => true),
  6. 14 => array(0 => true, 15 => false, 30 => true, 45 => true),
  7. );


Teraz muszę zrobić to dynamicznie, wartości mają być pobierane zgodnie z kilkoma czynnikami, np. od/do której lekarz dzisiaj przyjmuje ($harm_godz_od/do), ile trwa wizyta ($minuty), czy dana godzina (komórka z godziną) znajduje się w harmonogramie lekarza (funkcja czyWPrzedziale(), np. czyWPrzedziale(10:30,10:45) zwraca true, a czyWPrzedziale(16:00,16:15) zwraca false).

  1. for ($godzina = $harm_godz_od; $godzina < $harm_godz_do; $godzina++) {
  2. for ($minuta = 0; $minuta <= 60 - $minuty; $minuta = $minuta + $minuty)
  3. {
  4. $koniecWizyty = $minuta + $minuty;
  5. $czyDostepne = false;
  6.  
  7. $godzinyWizyt = array($godzina => array($minuta => $godzina));
  8. if ($harmonogramLekarza->czyWPrzedziale($godzina . ':' . $minuta,
  9. $godzina . ':' . $koniecWizyty)) {
  10. $minutyWizyt = array($godzina => array($godzina => $minuta,
  11. $czyDostepne => true));
  12. } else {
  13. $minutyWizyt = array($godzina => array($godzina => $minuta,
  14. $czyDostepne => false));
  15. }
  16. }
  17. }


Powyższy kod jest nieprawidłowy: wyświetla w tabelce tylko jedną komórkę (ostatnią, czyli z wartością "14:45").
Jak zrobić, żeby wyświetlone zostały wszystkie komórki (w tym przypadku 20)?
ADeM
Cały czas nadpisujesz tablicę.
Popatrz czym się różni:
  1. <?php
  2. $tab = 1;
  3. $tab = 2;
  4. ?>

Od:
  1. <?php
  2. $tab[] = 1;
  3. $tab[] = 2;
  4. ?>
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.