2012-11-17 8 views
5

Przepraszam, jeśli zostało to wcześniej zadane, ale mam problem ze znalezieniem odpowiedzi na mój problem.forep php w środku, aby rozwiązać problemy,

Próbuję zbudować system kalendarza i harmonogram systemu dla mojej aplikacji internetowej w PHP i mając trudności z jednym określonym obszarze.

mam „za” oświadczeniem, gdzie będzie sporządzenie razy w ciągu dnia, począwszy od 12.00, a kończąc na 11:30 PM

Wewnątrz tej pętli, mam foreach który chcę echo out obiektów w tablicy, które pasują do określonego czasu.

Wszystko, czego próbowałem, w tym użycie instrukcji for, while i foreach, nie pokazuje, po czym jestem, a wydarzenia są ustawione obok czasu.

tutaj jest mój kod

<?php 
$tStart = strtotime($start_time); 
$tEnd = strtotime($end_time); 
$tNow = $tStart; 

while($items = mysql_fetch_object($result)){ 
    $events[] = $items; 
} 

for($tNow=$tStart; $tNow<$tEnd; $tNow=strtotime('+30 minutes',$tNow)){ 
    // Time to color the rows to make it easier to read 
    if(!isset($day_row)){ 
     $day_row = "0"; 
    } 
    if(isset($day_row) && $day_row >= "2"){ 
     $day_row--; 
    } 
    else{ $day_row++; 
    } 

    //This bit draws the first column. 
    echo "<tr><td class=\"day_row".$day_row."\" width=\"70px\">".date("h:i A",$tNow)."</td>"; 

    // MySQL stuff is now here 
    foreach($events as $e => $item){ 
     if($item->apnt_start == $tnow){ 
      $rowspan = ((strtotime($item->apnt_finish)-strtotime($item->apnt_start))/"1800"); 
      echo "<td class=\"day_row_apnt\" rowspan=\"$rowspan\">".$item->apnt_start."-".$item->apnt_finish." ".$item->apnt_brief."</td></tr>"; 
     } 
    } 
} 
?> 

Obecnie jestem podane strony z
12:00 AM
00:30
01:00 AM
01:30
02 : 00 AM
02:30
03:00
03:30
04:00
04:30
05:00
05:30

Następny do czasu chcę spotkanie z czasu dopasowania.

Próbuję osiągnąć coś podobnego do http://mrbs.sourceforge.net/ Nie mogę użyć ich systemu, ponieważ nie mogę go poprawnie zintegrować i próbowałem spojrzeć na ich kod i wydaje się wskazywać na wiele plików i jestem mając trudności z zrozumieniem funkcji, której szukam.

Proszę dać mi znać, jeśli nie jest to wystarczająco jasne i postaram się wyjaśnić dalej.

+0

Co powoduje twój kod i jak różni się on od tego, czego szukasz? – octern

+0

z instrukcją if w miejscu w pętli foreach nic się nie wyświetla. Wygląda na to, że $ tNow pozostanie 12:00 i nie będzie kontynuowane. Jak mogę uzyskać $ tNow, aby przejść do przodu, aby foreach ostatecznie się spełniło, jeśli pojawi się jakieś wydarzenie? – Laywah

Odpowiedz

0

Chciałbym podziękować wszystkim, że dostarczone informacje na ten temat, mam w końcu dostał pracę z dodatkiem innej zmiennej i stosując metodę przechowywania tablicę w tablicę.

Ostateczny kod wygląda

<?php 
    $tStart = strtotime($start_time); 
    $tEnd = strtotime($end_time); 
    $tNow = $tStart; 
    $events = array(); 
    $eas = "0"; // eas stands for Event Array Start. this will be used to cycle through the events in the array. 
    while($items = mysql_fetch_assoc($result)){ 
     $events[] = $items; 
    } 

    for($tNow=$tStart; $tNow<$tEnd; $tNow=strtotime('+30 minutes',$tNow)){ 
     // Time to color the rows to make it easier to read 
      if(!isset($day_row)){ 
       $day_row = "0"; 
      } 
      if(isset($day_row) && $day_row >= "2"){ 
       $day_row--; 
      } 
      else{ $day_row++; 
      } 

      //This bit draws the first column. 
      echo "<tr><td class=\"day_row".$day_row."\" width=\"70px\">".date("h:i A",$tNow)."</td>"; 
     if(strtotime($events[$eas]['apnt_start']) == $tNow) {  
       $rowspan = ((strtotime($events[$eas]['apnt_finish'])-strtotime($events[$eas]['apnt_start']))/"1800"); 
       echo "<td class=\"day_row_apnt\" rowspan=\"$rowspan\" >".$events[$eas]['apnt_start']."-".$events[$eas]['apnt_finish']." ".$events[$eas]['apnt_brief']."</td></tr>"; 
       $eas++; 
      } 
      else{ 
       echo "<td class=\"day_row".$day_row."\"></td>"; 
      } 
     } //end for 
?> 

Używając zmiennej $ EAS udało mi się wtedy kontrolować który numer to zaczynają się poprzez ustawienie go na 0 początkowo, a następnie, gdy okaże się wpis z dopasowywania czas przeszedł przez instrukcję if, gdzie na końcu instrukcji if podano $ eas ++ do zwiększenia.

To udowodniło, że gdyby nie było umówionego terminu, $ eas nie uruchomiłoby się i nie wzrosłoby, pozostając na ostatnim zwiększonym $ eas.

Jeszcze raz dziękuję za pomoc wszystkich.

0

trzeba określić i ustawić wartość dla zmiennych poniżej:

$start_time = "09:00 AM"; 
$end_time = "11:30 PM"; 

Ponadto trzeba dodać zapytanie i połączenia z bazą danych (powyżej while($items = mysql_fetch_object($result)){ oświadczeniem):

mysql_connect("hostname", "user", "password"); 
mysql_select_db("mydb"); 
$result = mysql_query("select * from mytable"); 

EDIT: You powinien używać while mysql_fetch_assoc zamiast mysql_fetch_object. Wymień

while($items = mysql_fetch_object($result)){ 

z

while($items = mysql_fetch_assoc($result)){ 

Usuń: $events[] = $items;

Zapewnienie powyżej Twój while kończy się po cały kod jest wykonywany (kod Państwo wymienione w pytaniu) - zamknięcie wspornik }.

+0

Niestety zapomniałem wspomnieć, że ustawiłem $ start_time & $ end_time w innym pliku. Mam również ogólny mysql.php, który definiuje informacje o połączeniu, o których mówi. Otrzymuję $ items, które są zapełnione informacjami z mysql, jednak mój najnowszy problem, w którym informacja nie pasuje do czasu, w którym została zaplanowana. – Laywah

+0

Więc jaki jest problem? Czy chodzi o wynik HTML; próbując umieścić to w stole czy coś? – salih0vicX

+0

wykonanie print_r ($ events) daje następującą tablicę Array ([0] => stdClass Object ([apnt_id] => 6 [apnt_person] => 3 [apnt_date] => 2012-11-17 [ap_st_start] => 00 : 00 [apnt_finish] => 00:30 [apnt_brief] => test 3 [apnt_description] => opis testu 3) [1] => stdClass Object ([apnt_id] => 4 [apnt_person] => 3 [apnt_date] = > 2012-11-17 [ap_st_start] => 08:30 [apnt_finish] => 09:00 [apnt_brief] => test 1 [opis ap_st] => opis testu 1) [2] => stdClass Object ([apnt_id] = > 5 [apnt_person] => 3 [apnt_date] => 2012-11-17 [ap_st_start] => 12:00 Nie mogę dopasować szczegółów całej tablicy. – Laywah

0

OK, to powinno działać dla Ciebie.

<?php 
    $tStart = strtotime($start_time); 
    $tEnd = strtotime($end_time); 
    $tNow = $tStart; 

    echo '<table>'; 

    while($events = mysql_fetch_assoc($result)){ 
     for($tNow=$tStart; $tNow<$tEnd; $tNow=strtotime('+30 minutes',$tNow)){ 
     // Time to color the rows to make it easier to read 
      if(!isset($day_row)){ 
       $day_row = "0"; 
      } 
      if(isset($day_row) && $day_row >= "2"){ 
       $day_row--; 
      } 
      else{ $day_row++; 
      } 

      //This bit draws the first column. 
      echo "<tr><td class=\"day_row".$day_row."\" width=\"70px\">".date("h:i A",$tNow)."</td>"; 
      if(strtotime($events['apnt_start']) == $tNow) {  
       $rowspan = ((strtotime($events->apnt_finish)-strtotime($events->apnt_start))/"1800"); 
       echo "<td class=\"day_row_apnt\" rowspan=\"$rowspan\">".$events->apnt_start."-".$events->apnt_finish." ".$events->apnt_brief."</td></tr>"; 
      } 
     } //end for 
    } //end while 
    echo '</table>'; 
?> 
+0

Dzięki Salih0vicX, jest prawie poprawne. Czasy pojawiają się tam, gdzie powinny i tak samo powinny się zdarzyć ... Jeśli mam trzy wydarzenia w ciągu dnia, otrzymuję od 12 do 12 rano trzy razy z 1 zdarzeniem w każdej iteracji od 12 rano do 12 rano .. wierzę to jest spowodowane oświadczeniem while, czy to jest poprawne? Czy jest jakiś sposób, aby to mieć, aby była 1 iteracja od 12 rano do 12 rano i 3 zdarzenia przedstawione w tej 1 iteracji? – Laywah

Powiązane problemy