<?php
$idioma="es";$titulo="Tabla";
//Funcion para tabular el codigo html
function tab($num)
{
$tabstr="";
for($i=0;$i<$num;$i++){
$tabstr.=" ";
}
return $tabstr;
}
//Esto es lo que devolveria la BBDD si le hacemos un select y luego lo transformamos en array.
//Asumo que en el select elegirás solamente estos campos
//Asumo que harás la consulta con la restringcion de 1 año.
//Asumiendo esto la consulta select sera algo como:
// SELECT id,fecha,adultos,sucursal FROM nombre_tabla WHERE fecha LIKE 'año_de_consulta%'
//Un ejemplo de el año a 2012.
$Select_BBDD=array(
array(
'id' => "1",
'fecha' => "2012-01-01",
'adultos' => "352",
'sucursal' => "prueba1"
),
array(
'id' => "2",
'fecha' => "2012-01-08",
'adultos' => "543",
'sucursal' => "prueba1"
),
array(
'id' => "3",
'fecha' => "2012-01-15",
'adultos' => "593",
'sucursal' => "prueba1"
),
array(
'id' => "7",
'fecha' => "2012-01-15",
'adultos' => "2",
'sucursal' => "prueba2"
),
array(
'id' => 4,
'fecha' => "2012-02-5",
'adultos' => "352",
'sucursal' => "prueba2"
),
array(
'id' => "5",
'fecha' => "2012-02-12",
'adultos' => "363",
'sucursal' => "prueba2"
),
array(
'id' => "6",
'fecha' => "2012-02-19",
'adultos' => "400",
'sucursal' => "prueba2"
),
array(
'id' => "8",
'fecha' => "2012-03-12",
'adultos' => "342",
'sucursal' => "prueba3"
)
);
//Transformará el mes de numero en Letras
$mes_str=array(
"01" => "Enero", "02" => "Febrero", "03" => "Marzo",
"04" => "Abril", "05" => "Mayo" , "06" => "Junio",
"07" => "Julio", "08" => "Agosto", "09" => "Septiembre",
"10" => "Octubre", "11" => "Noviembre", "12" => "Diciembre");
//Separa los valores iniciales de fecha en 3 variables distintas.
list($ano_tmp,$mes_tmp,$dia_tmp)=explode("-", $Select_BBDD[0]["fecha"]);
//Declaracion de variables
$num_total_fechas=0;
$num_meses_campos=array();
$num_meses_campos[$mes_tmp]=0;
$sucursal_tmp="";
$sucursales=array();
$fechas=array();
//Crea la estructura para hacer los bucles mas sencillos.
foreach($Select_BBDD as $row){
//Separa los campos de fecha
list($ano,$mes,$dia)=explode("-",$row["fecha"]);
//Crea una cadena de caracteres de la fecha
$fechastr="$dia/$mes/".substr($ano,-2);
//Si la fecha no esta en el array de fechas entonces realiza el codigo
if(!in_array($fechastr,$fechas)){
//Añade la fecha que no existe a fechas
$fechas[]=$fechastr;
//Esta parte es para poder representar los meses y para ello
// y contar el colspan de cada columna de mes.
if($mes_tmp!=$mes){
$num_meses_campos[$mes]=0;
$mes_tmp=$mes;
}
$num_meses_campos[$mes]++;
$num_total_fechas++;
}
$sucursal_tmp=$row["sucursal"];
$sucursales[$sucursal_tmp][$fechastr]=$row["adultos"];
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xml:lang="<?=$idioma?>" xmlns="http://www.w3.org/1999/xhtml" lang="<?=$idioma?>">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title><?=$titulo?></title>
</head>
<body>
<div id="contenedor">
<table border="1">
<thead>
<tr>
<th rowspan="3"> Vacio </th>
<th colspan="<?=$num_total_fechas?>">Asistencia semanal Total</th>
</tr>
<tr>
<?php
//Representamos todos los meses y el numero de dias que tiene cada mes
foreach($num_meses_campos as $mes => $n_colspan){
$strmes=$mes_str[$mes];
echo tab(3)."<th colspan=\"$n_colspan\">$strmes</th>\n";
}?>
</tr>
<tr>
<?php
//Representamos cada fecha
foreach($fechas as $fecha){
echo tab(3)."<th>$fecha</th>\n";
}?>
</tr>
</thead>
<?php
//Representamos cada sucursal, que a su vez contiene información sobre la fecha
// y sobre los adultos de cada sucursal.
foreach($sucursales as $sucursal => $adultos)
{
echo tab(2)."<tr>\n";
echo tab(3)."<th>$sucursal</th>\n";
//Recorremos todas las fechas por cada sucursal y si existen entonces las
//mostramos sino ponemos una celda vacia.
foreach($fechas as $fecha)
{
if(array_key_exists($fecha, $adultos)){
$adulto=$adultos[$fecha];
echo tab(3)."<td>$adulto</td>\n";
}else{
echo tab(3)."<td></td>\n";
}
}
echo tab(2)."</tr>\n";
}
?>
</table>
</div> <!-- /contenedor -->
</body>
</html>