A to nie lepiej zrobić sobie boole'owska tablicę pomocniczą gdzie byś ustawiał która godzina wolna? Kluczami są godziny, wartościami true lub false. Dostaniesz ładny dla danego dnia wykres. Co fajniejsze, to może to być tablica zagnieżdżona pod kątem dni. Startowo tablica miałaby postać:
'2009-11-05' => array( 8
=> false, 9
=> false, 10
=> false .... 16
=> false, 17
=> false), '2009-11-06' => array( 8
=> false, 9
=> false, 10
=> false .... 16
=> false, 17
=> false), ...
'2009-11-10' => array( 8
=> false, 9
=> false, 10
=> false .... 16
=> false, 17
=> false), '2009-11-11' => array( 8
=> false, 9
=> false, 10
=> false .... 16
=> false, 17
=> false), );
Gdzie daty to interesujące Cię dni. Mógłby być jeden lub kilka. Potem zapytanie do bazy tyczące się interesujących dni i w pętli while tylko byś sprawdzał które godziny są zajęte oraz ustawiałbyś we właściwym miejscu true. Na koniec ładnie to pchnąć do widoku który wygeneruje tabelkę zajętości

Można zrobić i na inne sposoby, bo możliwości jest od zatrzęsienia. Ja zrobiłem tak, bo taką ładnie sformatowaną tablicę pchnąć z modelu do widoku to niemal rozkosz

EDIT: Taka struktura pozwala Ci w prosty sposób stworzyć tabelę zajętości na zasadzie:
<tr><td>Dzień</td><td></td>8.00<td></td><td>9.00</td>...<td>16.00</td><td>17.00</td></tr>';
foreach($item AS $key => $value) {
<td>'.$key.'</td>';
foreach($value AS $godziny) {
if($godziny)
else
}
}
</table>
Aha... Taka forma generuje Ci po prostu przyjęcia w sposób bardzo przejrzysty. Tylko obrzucić CSS(kolory dla zajętych i wolnych godzin), ładniejszy html zrobić (th, tfoot, tcaption) i po prostu bajka wypas. W ten sposób zestawienia dniowe, tygodniowe czy na określone dni można sobie w prosty sposób wizualizować, bo całość ładnie się parametryzuje i funkcja dzięki temu jest w miarę elastyczna.