Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [HTML][PHP]Kalendarz - system rezerwacji - udoskonalenie, Kalendarz z rezerwacjami oparty o tabelę - za dużo iteracji.
maxslawek
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 2.02.2013

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


Witam,
Skończyłem robić właśnie mini aplikację internetową, w której w łatwy i przyjemny sposób administrator może dodawać/edytować i usuwać rezerwacje.
Stworzyłem również system wyświetlania rezerwacji - wybieramy rok i interesujący nas miesiąc i pobieramy wszystkie rezerwacje pasujące do zapytania.

Wszystko niestety oparłem o tabelę i wyszło dość sporo zagnieżdżeń tj. :
  1. <table class="kalendarz">
  2. <thead>
  3. <tr>
  4. <th>Pokój</th>
  5. <th>Max. Os.</th>
  6. <?php
  7. $number = cal_days_in_month(CAL_GREGORIAN, $miesiac, $rok);
  8. $x = 0;
  9. do{
  10.  
  11. $x = $x+1;
  12.  
  13. echo '<th>'.$x.'</th>';
  14. }
  15. while($x<$number)
  16. ?>
  17. </tr>
  18. </thead>
  19. <tbody>
  20. <?php foreach ($pokoje as $pokoje_spec):?>
  21. // TR dla każdego pokoju
  22. <tr>
  23. <td><?php if(isset($pokoje_spec['nazwa_pokoje']) and $pokoje_spec['nazwa_pokoje'] != NULL) {echo $pokoje_spec['nazwa_pokoje'];};?></td>
  24. <td ><?php if(isset($pokoje_spec['ilosc_osob_pokoje']) and $pokoje_spec['ilosc_osob_pokoje'] != NULL) {echo $pokoje_spec['ilosc_osob_pokoje'];};?></td>
  25. <?php
  26. $number = cal_days_in_month(CAL_GREGORIAN, $miesiac, $rok);
  27. $x = 0;
  28. do{
  29. // TD dla każdego dnia miesiąca
  30. $x = $x+1;
  31. $data_text = $rok.'-'.$miesiac.'-'.$x;
  32. $aktualna_data = date("Y-m-d", strtotime($data_text));
  33.  
  34. echo '<td>';
  35. foreach ($rezerwacje as $rezerwacje_spec) {
  36. if($rezerwacje_spec['id_pokoje'] == $pokoje_spec['id_pokoje']){
  37. // Foreach sprawdzający czy dana rezerwacja pasuje do założeń - najpierw jeden IF z samym pokojem, a potem 3 IF mniej ważnych (dla daty początkowej, końcowej i w trakcie rezerwacji)
  38. }
  39.  
  40. }
  41. echo '</td>';
  42. }
  43. while($x<$number)
  44. ?>
  45. </tr>
  46. <?php endforeach; ?>
  47.  
  48. <tr>
  49. <td colspan="2"><a class="admin_section_link" title="Anuluj zmiany" href="<?php echo base_url()?>admin_kalendarz">Powrót</a></td>
  50. </tr>
  51. </tbody>
  52. </table>

I teraz pytanie - można to jakoś uprościć by tych iteracji było znacznie mniej?

Pokoi jest 50. Dni w miesiącu mamy średnio 30. Rezerwacji niech będzie ~400 na miesiąc co daje ok. 600 000 operacji ;(
Foreach dla pokoi - potem do/while dla każdego dnia miesiąca no i potem przy każdym dniu sprawdzenie każdego zamówienia czy pasuje do założeń (dzień i pokój).
Jak na razie wszystko działa, ale chciałbym to rozwiązać nieco bardziej "profesjonalnie" (IMG:style_emoticons/default/wink.gif)
Powód edycji: [Kshyhoo]: bb-code
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
JakubBab
post
Post #2





Grupa: Zarejestrowani
Postów: 96
Pomógł: 2
Dołączył: 13.07.2015

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


ale Panie namieszales

Sprobuj cos w tym stylu (ponizszy kod nie bedzie dzialac bo nie znam Twoich tablic )

  1.  
  2.  
  3. $number = cal_days_in_month(CAL_GREGORIAN, $miesiac, $rok);
  4.  
  5.  
  6. $table = '<table class ="kalendarz"><tr><th>Pokój</th><th>Max. Os.</th>';
  7. for ($i=0;$i<$number;$i++){
  8.  
  9.  
  10. $table.= '<th>'.$i.'</th>';
  11.  
  12.  
  13.  
  14. }
  15.  
  16. $table .= '</tr>'<td>;
  17. //nie wiem jak wyglada tablica pokoje jesli ma w sobie dwie tabele to
  18.  
  19. foreach($pokoje as $pokojeKey => $pokojeVal){
  20.  
  21. if($pokojeVal != ''){
  22. $table.='<td>'.$pokojeVa.'<td>';
  23. }
  24.  
  25. }
  26.  
  27. $table .='</td>';


Bez sensu jest podawanie zalozen w if a nie kodu. CIezko pomagac kiedy musimy sie domyslac-> popraw

  1. foreach ($rezerwacje as $rezerwacje_spec) {
  2. if($rezerwacje_spec['id_pokoje'] == $pokoje_spec['id_pokoje']){
  3. // Foreach sprawdzający czy dana rezerwacja pasuje do założeń - najpierw jeden IF z samym pokojem, a potem 3 IF mniej ważnych (dla daty początkowej, końcowej i w trakcie rezerwacji)
  4. }
  5.  
  6. }
<-- wynik tego foreach-a wstaw w zmienna w pierwszej petli ( *for* bo i tu i to uzywasz tej samej zmiennej $x do iteracji wiec po co 2 razy to samo. i w odpowiednim momencie (podejrzewam, ze na koncu doklej do reszty.

Ten post edytował JakubBab 2.06.2016, 21:27:39
Go to the top of the page
+Quote Post

Posty w temacie


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: 17.10.2025 - 17:41