2017-04-14 79 views
0

我有带列标题的循环产生的表纹槽用30分钟的时间间隔周五,时间序列为24小时我刚才缩短示例代码:动态表行跨度

$times = array(00:00, 00:30, 01:00, 01:30); 
$skip = array(); 
$row = 1; 
<table> 
<tr> 
    <td>Time</td><td>Mon</td><td>tue</td> 
<tr> 
foreach($times AS $val){ 
    $stmt = $mysqli->prepare(" 
    SELECT `show`,`time_start`,`time_stop`,`show_day` 
    FROM `db_shows` WHERE `time_start`='$val' 
    "); 
    $stmt->execute(); 
    $stmt->store_result(); 
    $stmt->bind_result($myrow[show],$myrow[time_start],$myrow[time_stop],$myrow[show_day]); 
    $stmt->fetch(); 
    // GET THE ROWSPAN 
    $a = new DateTime($myrow[time_start]); 
    $b = new DateTime($myrow[time_stop]); 
    $interval = $a->diff($b); 
    $res = $interval->format('%h'); 
    $res *= 2; 
    $res += 1; 
    // ARRY FOR ROWS TO SKIP TD 
    code in second part 
    // APPLAY DISPLAY NONE IF NEEDED 
    code in second part 
    // BUILD COLUMNS 
    switch($myrow[show_day]){ 
    case "":$tds = "<td>&nbsp;</td><td>&nbsp;</td>"; break; 
    case "mon":$tds = "<td rowspan="$res" style="$mon">$myrow[show]</td><td>&nbsp;</td>"; break; 
    case "tue":$tds = "<td>&nbsp;</td><td rowspan="$res" style="$tue">$myrow[show]</td>"; break; 
    } 
    <tr> 
    <td>$val</td>$tds 
    </tr> 
$row++; 
}  
</table> 

现在我的代码工作正常使用rowspan生成表,但我知道必须根据行rowspan($ res)包含多少行来删除下一行中必需的td。这可能是我跌倒出车的一部分:) 我试图在这里实现是获得行号和“日TD”在随后

// ARRY FOR ROWS TO SKIP TD 
if($res >=2){ 
$rowCount = $res -1; 
$rowSkip = $row; 
for($i=1;$i <= $rowCount; $i++){ 
$rowSkip++; 
$skip[$rowSkip] = $myrow[show_day]; 
} 
} 
// LOOK IF ROW HAVE VALUE 
foreach($skip AS $key2 => $val2){ 
if($row == "$key2" && $myrow[show_day]="$val2"){ 
    $$val2 = "display:none"; 
} 
} 

我行隐藏我甚至不确定我是否正在接触关于正确问题的整个概念,任何帮助都将不胜感激。 谢谢!

在一天结束的时候我的表应该是这样的:

table

+0

你可以给你的数据你有什么? –

+0

当天的节目($ myrow [show_day]) 开始时间显示(time_start) 停止时间显示(time_stop) 显示名称($ myrow [show]) – user3744959

+0

好吧我只想要数组。不是一个问题,我会让它成为我的自我。 –

回答

0

这是个够答案

嗯,我没有好时机,蛋糕的全阵列,但希望它会为你工作。

<?php 
$times = array('00:00','00:30', '01:00', '01:30','02:00','02:30','03:00'); 
$days = array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); // 0 = Sun ... 6 = Sat 


$shows = array(); 

$shows[] = array(
    "day"=>0, 
    "time_start"=>'00:00', 
    "time_end"=>'00:30', 
    "name"=>"Show A" 
    ); 

$shows[] = array(
    "day"=>1, 
    "time_start"=>'00:00', 
    "time_end"=>'00:30', 
    "name"=>"Show B" 
    ); 

$shows[] = array(
    "day"=>3, 
    "time_start"=>'00:00', 
    "time_end"=>'00:30', 
    "name"=>"Show C" 
    ); 

$shows[] = array(
    "day"=>4, 
    "time_start"=>'00:00', 
    "time_end"=>'00:30', 
    "name"=>"Show D" 
    ); 

$shows[] = array(
    "day"=>5, 
    "time_start"=>'00:00', 
    "time_end"=>'00:30', 
    "name"=>"Show E" 
    ); 

$shows[] = array(
    "day"=>6, 
    "time_start"=>'00:00', 
    "time_end"=>'00:30', 
    "name"=>"Show F" 
    ); 

$shows[] = array(
    "day"=>1, 
    "time_start"=>'00:30', 
    "time_end"=>'01:30', 
    "name"=>"Show G" 
    ); 

$shows[] = array(
    "day"=>2, 
    "time_start"=>'00:30', 
    "time_end"=>'01:00', 
    "name"=>"Show H" 
    ); 
$shows[] = array(
    "day"=>3, 
    "time_start"=>'00:30', 
    "time_end"=>'01:00', 
    "name"=>"Show I" 
    ); 
$shows[] = array(
    "day"=>4, 
    "time_start"=>'00:30', 
    "time_end"=>'01:00', 
    "name"=>"Show J" 
    ); 
$shows[] = array(
    "day"=>1, 
    "time_start"=>'01:00', 
    "time_end"=>'01:30', 
    "name"=>"Show K" 
    ); 

$shows[] = array(
    "day"=>2, 
    "time_start"=>'01:00', 
    "time_end"=>'02:00', 
    "name"=>"Show L" 
    ); 

$shows[] = array(
    "day"=>1, 
    "time_start"=>'01:30', 
    "time_end"=>'02:00', 
    "name"=>"Show M" 
    ); 

$shows[] = array(
    "day"=>2, 
    "time_start"=>'01:30', 
    "time_end"=>'02:00', 
    "name"=>"Show N" 
    ); 

$parsedShow = array(); 

foreach ($shows as $show) { 

    $start_index = array_search($show['time_start'], $times); // $key = 2; 
    $end_index = array_search($show['time_end'], $times); // $key = 1; 

    if($end_index - $start_index > 1){ 
     //NEED SPAN 
     $show['span'] = (($end_index - $start_index)); 
    }else{ 
     $show['span'] = false; 
    } 
    $parsedShow[$show['time_start']][] = $show; 
} 

// echo "<pre>"; 
// print_r($parsedShow); 

// die(); 
?> 
<html> 
<table border="1"> 
    <tr> 
     <td> 
      Time 
     </td> 
     <?php 
     foreach ($days as $day) { 
      echo "<td>$day</td>"; 
     } 
     ?> 

    </tr> 
    <?php 
    foreach ($times as $time) { 
     ?> 
     <tr> 
      <?php 
      if(!isset($parsedShow[$time])){ 
       continue; 
      } 
      echo "<td>$time</td>"; 
      foreach ($parsedShow[$time] as $show) { 
       ?> 
       <td <?= ($show['span'] !== false ? "rowSpan='".$show['span']."'" : "")?>><?= $show['name'] ?></td> 
       <?php } 
       ?> 
      </tr> 
      <?php } 

      ?> 
     </table> 
     </html> 
+0

感谢Allot,非常感谢,现在将实施它。 – user3744959