A co ma być wewnątrz tej tabelki, puste komórki?
Bo jeśli chodzi ci tylko o wygenerowanie nagłówków i godzin, to sprawa jest prosta:
<table border="1">
<?php
$gabinety = array('Kowalski', 'Nowak', 'Doe');
$godzinaStart = 8; $godzinaStart = mktime($godzinaStart, 0);
$minutOdstep = 15;
// wypełnianie pierwszego rzędu
echo '<tr><td></td>'; // początek rzędu i pusty element
foreach ($gabinety as $g)
echo '<th>' . $g . '</th>';
echo '</tr>'; // koniec pierwszego rzędu
// wypełnianie kolejnych rzędów w postaci [godzina][][][][]
for ($i = 0; $i < 10; $i++)
{
// generowanie napisów z godziną
$godzina = date("H:i", $godzinaStart + $minutOdstep * $i * 60);
echo '<tr><th>' . $godzina . '</th>';
for ($j = 0; $j < count($gabinety); $j++)
echo '<td></td>'; // wstawianie pustych kolumn w ilości pasującej do ilości gabinetów
echo '</tr>';
}
?>
</table>
Jeżeli z kolei masz jeszcze te godziny przyjęć/zajętości/czegokolwiek w bazie danych i chcesz wypełnić odpowiednio tabelkę - sprawa się komplikuje, ale to jest do zrobienia.
<font size="2">Uwaga, kod jest brzydki, jego jedyna zaleta jest taka, że działa :-)</span>