le corregí algunos detalles, tiene como 2 líneas menos
Código PHP:
<style>
*{font-family:Tahoma;font-size:10px;}
table{border-collapse:collapse;border:1px solid #ccc;margin-top:10px}
td, th{padding:4px;border:1px solid #ccc;}
.sem{background-color:blue;color:white;}
</style>
<?
$nSemana_ini = 29; # semana inicial
$nSemana_fin = 32; # semana final
$year = 2014; # año en 4 digitos
$dias_semana = array("Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa");
$inicio_semana = $nSemana_ini * 7 - 8;
$termino_semana = $nSemana_fin * 7 - 2;
$trabajadores = array("trabajador 1", "trabajador 2", "trabajador 3", "trabajador 4");
$pr .= "Inicio: ".date("d-m-Y", mktime(0,0,0,1,$inicio_semana,$year));
$pr .= "<br>Término: ".date("d-m-Y", mktime(0,0,0,1,$termino_semana,$year));
$pr .= "<table><tr><td> </td>";
for($i=0;$i<=$termino_semana-$inicio_semana;$i++){
$f = mktime(0,0,0,1,$inicio_semana + $i,$year);
$hd_dia_semana = $dias_semana[date("w", $f)]."<br>".date("d", $f);
# condicion para Lunes a Viernes diferentes de Sábado y Domingo
$dia_laboral = ($i%7<5) ? "class=sem" : "";
$pr .= "<th width=28 align=center nowrap ".$dia_laboral.">".$hd_dia_semana."</th>";
}
$pr .= "</tr>";
foreach($trabajadores as $trabajador){
$pr .= "<tr><td nowrap>".$trabajador."</td>";
for($i=0;$i<=$termino_semana-$inicio_semana;$i++){
# Aquí debe ir el valor que extraigas, en el ejemplo es aleatorio
# condicion para Lunes a Viernes diferentes de Sábado y Domingo
$valor = ($i%7<5) ? rand(1, 999) : "-";
$pr .= "<td align=center nowrap>".$valor."</td>";
}
$pr .= "</tr>";
}
$pr .= "</table>";
echo $pr;
?>