El planteamiento, para mí, seria que a partir de la fecha de hoy, reconstruir toda la semana, sabiendo que son siete dias (o cinco). Entonces en la base de datos guardaria la fecha y la hora en la que se produce el evento en segundos.
Por ejemplo
Código PHP:
// Granularidad (30 min). Baso todas las horas en segundos a partir de las 00:00
// con una granularidad de 30 minutos.
$granularidad = 30 * 60;
$eventos = array(
array(
'30300' => array('Hora con el médico'),
'34200' => array('Dar de comer al perro')
),
array(
'77400' => array('Ir a cenar con la novia')
)
);
$dias = array('Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado', 'Domingo');
$max_hora = ((23*3600) + (59 * 60));
echo "<table>";
echo "<thead>";
echo "<tr>";
foreach($dias as $nombre_dia) {
echo "<th>" , $nombre_dia , "</th>";
}
echo "</tr>";
echo "</thead>";
echo "<tbody>";
echo "<tr>";
foreach($dias as $num_dia => $nombre_dia) {
echo "<td>";
echo "<dl>";
$hay_eventos = sizeof($eventos[$num_dia]) > 0;
for($i = 0; $i <= $max_hora; $i += $granularidad) {
echo "<dt>" , mostrarHoraAPartirDeSegundos($i) , "</dt>";
echo "<dd>";
if($hay_eventos) {
echo mostrarEventos($eventos[$num_dia], $i);
}
echo "</dd>";
}
echo "</dl>";
echo "</td>";
$hay_eventos = FALSE;
}
echo "</tr>";
echo "</tbody>";
echo "</table>";
Aviso que este código no está probado así que es posible que haya algun error, pero es básicamente para aclarar el concepto a mi modo de ver.
Saludos!