Cytat
Przepraszam że tak na około zacząłem ale już nie ogarniam
Gdybyś ogarniał to byś tu nie pisał

generalnie inaczej zaprojektowałbym bazę (trzymając w niej godzinę rozpoczęcia i zakończenia terminu), ale tu masz rozwiąnie do Twojej struktury
//rozumiem, że tak wyglądają wyniki zwracane z bazy
(
array('res_hours'=>8, 'res_min '=>0, 'res_minutes'=>60), //od 8:00 do 9:00 array('res_hours'=>10, 'res_min '=>30, 'res_minutes'=>90), //10:30 do 12:00 array('res_hours'=>14, 'res_min '=>0, 'res_minutes'=>120), //10:30 do 12:00 );
foreach($results as $value)
{
for($i=0, $loops = $value['res_minutes']/30; $i<$loops; ++$i) //tworzymy pętlę tyle razy ile zablokowanych terminów mamy w zarezerwowanym czasie np. wizyta 90min na 8:00 blokuje 3 terminy: 8:00, 8:30, 9:00
{
$busyHours[] = date('H:i', strtotime("+".($i*30)." minutes", mktime($value['res_hours'], 0
, 0
, 0
, 0
, 0
))); //z }
}
//po tym otrzymujemy tablicę z wszystkimi terminami jakie są zajęte i teraz już łatwo bo w pętli będziemy tylko sprawadzać czy dany termin znajduje się w tablicy
for($i=8; $i<=16; ++$i)
{
//sprawdzamy czy pełna jest zajęta
$firstTerm = date('H:i', mktime($i, 0
, 0
, 0
, 0
, 0
));
{
echo "{$firstTerm} zajęty <br>"; }
else
{
echo "{$firstTerm} wolny <br>"; }
//sprawdzamy czy wpółdo pełnej jest zajęte
{
echo "{$secondTerm} zajęty <br>"; }
else
{
echo "{$secondTerm} wolny <br>"; }
}
oczywiście to nie taki całkiem gotowiec do wklejenia. Pierwszego foreach zastąp
lub
while($value = $query->fetch())
w zależności od tego czy używasz PDO czy funkcje mysql_. Myślę, że z tym już sobie spokojnie poradzisz
Aha zapomniałem dodać jak to generalnie działa, rozbiłem ten proces na 2 etapy:
1. tworzymy tablicę, która będzie zawierać wszystkie zajęte terminy np. 8:30, 9:30, 10:00 itd,
2. przy tworzeniu tabelki html dokonujemy prostego sprawdzenia czy dana godzina znajduje się w tablicy zajętych terminów