phpbar.de logo

Mailinglisten-Archive

[php] Gleichzeitige Termine

[php] Gleichzeitige Termine

Sebastian Mendel lists at sebastianmendel.de
Die Dez 14 16:17:23 CET 2004


ANGEL Harald schrieb:
> Schönen Nachmittag!
> 
> Ich hab eine Tabelle mit Terminen. (Termin, Anfangszeit, Endzeit)
> Wie finde ich heraus, wieviele Termine an einem Tag max. gleichzeitig sind?
> Ich muß einen Kalender programmieren...
> 
> Meine Idee:
> Da ich Termine nur stündlich eingeben kann, könnte ich eine Schleife zu jeder halben Stunde (0:30, 1:30, 2:30, ...) laufen lassen und ein "Select * Where anfangszeit < [halbe stunde] < endzeit" ist..
> Aber das muß doch leichter gehen oder?

also ich hab das auch mal gebraucht, schon ne weile her deshalb sieht 
der Code auch noch etwas 'altbacken' aus, außerdem musste ich etwas 
anpassen, habs jetzt nicht probiert ob es so genau passt, aber das 
Grundprinzip müsste ja klar sein:

Ich hol mir alle Termine für eine Woche und lege sie dann in einem Array ab

$array[DATUM][SPALTE]

wobei SPALTE normalerweise immer nur 1 ist, außer wenn sich Termine 
überschneiden, dann gibt mehr Spalten, man kann daraus dann eine Anzeige 
wie im Outlook oder David aufbauen.


while ( $_appointment = mysql_fetch_assoc($result) )
{
     /** @var int daycol Tagesspalten (Spalten pro Tag) */
     $daycol = 1;

     /** @var bool create_new_row Flag ob neue Spalte angelegt werden 
soll */
     $create_new_col = true;

     while ( $create_new_col && 
isset($arrAppointment[$_appointment['day']][$daycol]) )
     {
         /** @var bool create_new_row Flag ob neue Spalte angelegt 
werden soll */
         $create_new_col = false;

         // wir durchsuchen alle Termine in dieser Spalte ob sich einer 
mit dem aktuellen überschneidet
         foreach ( $arrAppointment[$_appointment['day']][$daycol] as 
$_time_d_start => $__appointment )
         {
             if ( $__appointment['time_d_start'] >= 
$_appointment['time_d_start'] && $__appointment['time_d_start'] < 
$_appointment['time_d_end'] )
             {
                 // startzeit liegt in einem anderen Termin
                 $create_new_col = true;
                 break;
             }
             elseif ( $__appointment['time_d_end'] > 
$_appointment['time_d_start'] && $__appointment['time_d_end'] <= 
$_appointment['time_d_end'] )
             {
                 // endzeit liegt in einem anderen Termin
                 $create_new_col = true;
                 break;
             }
         }

         $daycol++;
     }

 
$arrAppointment[$_appointment['day']][$daycol][$_appointment['time_d_start']] 
= $_appointment;
}

credits goes to me! ;-)


-- 
Sebastian Mendel

www.sebastianmendel.de www.warzonez.de www.tekkno4u.de www.nofetish.com
www.sf.net/projects/phpdatetime        www.sf.net/projects/phptimesheet


php::bar PHP Wiki   -   Listenarchive