程序化从php生成的HTML表中删除

时间:2012-07-14 16:31:59

标签: php html dom html-table

我想删除从php中的html表生成的无关表格单元格。 请参阅此示例中的表格末尾:http://leobee.com/android/push/so/stdt3.php **注意我还没有更新代码在IE中工作,请使用gecko浏览器。

我在jQuery中找到了这个例子:http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_tr_deletecell。但是我需要在php中生成colspan单元后删除额外的单元格。

问题:

  1. 在处理了colspan单元格之后,php是否可以操作DOM来删除表格单元格?如果可能的话,你能否规定解决这个问题的过程,或者我应该研究哪些方法或库。

  2. 您是否知道另一个与我的表类似的示例,可以以编程方式创建按小时分解的日程表,可以将事件扩展超过一小时?

  3. 代码:

    <?php
    
    // events array
    $events = array(
        array('Atari', 'Hall D' , '10:00 PM'),
        array('Sonic the Hedgehog', 'Panel 4' , '11:00 AM'),
        array('Bleach', 'Video 3' , '4:00 PM'),
        array('Sailor Moon ', 'Panel 4' , '6:00 PM') 
    );
    
    $events_flat = array();
    
    foreach($events as $event)
    {
        $events_flat[$event[0]] = $event[1] . $event[2];
    }
    
    // location array
    $locations = array(
        'Arena', 'Hall D', 'Video 1', 'Video 2', 'Video 3',
        'Video 4', 'Video 5', 'Video 6', 'HD Theater', 'Panel 1', 
        'Panel 2', 'Panel 3', 'Panel 4', 'WorkShop 1', 'WorkShop 2',
        'WorkShop 3', 'WorkShop 4', 'Autograph 1', 'Autograph 2'
    );
    
    // event start time array
    $times = array(
        '9:00 AM', '10:00 AM', '11:00 AM','12:00 PM', '1:00 PM', '2:00 PM',
        '3:00 PM', '4:00 PM', '5:00 PM', '6:00 PM', '7:00 PM',
        '8:00 PM', '9:00 PM', '10:00 PM', '11:00 PM', '12:00 AM',
        '1:00 AM', '2:00 AM'
    );
    
    $html = '<table><tr><td bgcolor="green"><table name="schedule" id="schedule" border="1" bordercolor="black"><tr><td></td>';
    
    foreach ($times as $time)
    {
        $html .= '<td width="100" height="25" bgcolor="yellow">';
        $html .= htmlspecialchars($time);
        $html .= '</td>';
    }
    
    foreach ($locations as $location)
    {
        $html .= '<tr><td width="100" height="25" bgcolor="pink">';
        $html .= htmlspecialchars($location);
        $html .= '</td>';
    
        foreach ($times as $time)
        {
    
    
           $event = array_search($location . $time, $events_flat);
    
            if ($event === FALSE)
            {
                $html .= '<td width="100" height="25" bgcolor="#70DBDB">';
                $html .= ' ';
    
    
            }
            else
            {
                //http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_tr_deletecell
                //http://www.php.net/manual/en/function.array-pop.php
                //duration in hours
                // Todo detect ie and use colSpan
                $duration =3;
                $html .= '<td colspan="'.$duration.'" width="100" height="25" bgcolor="orange">';
                $html .= htmlspecialchars($event);
                //$event = array_pop($event-1);
    
    
            }
    
            $html .= '</td>';
          // $deletecell=document.getElementById("schedule").rows[this];
          //  $deletecell.deleteCell(-1);
        }
    
        $html .= ' </tr>';
    }
    
    $html .=  '</table></td></tr></table>';
    
    echo $html;
    
    ?>
    

2 个答案:

答案 0 :(得分:1)

我认为您应该考虑修改输出而不是故意产生错误的输出然后尝试纠正它。

您可以使用常规foreach循环,而不是使用for,而是使用递增变量i来抓取索引$time处的每个i数组。然后,如果您发现事件,则可以将i增加额外的持续时间,从而减少<td>个单元格。

else
{
    $duration = 3;
    $html .= '<td colspan="'.$duration.'" width="100" height="25" bgcolor="orange">';
    $html .= htmlspecialchars($event);
    $i += $duraton - 1 // subtract 1 since $i will be incremented after this iteration
}

基本上,您在查找事件时将时间增加3个时隙而不是通常的1个,因为每个事件占用3个时隙。请注意,这可以扩展到适用于任何持续时间的事件。

作为旁注,我不知道php,所以我的语法可能是错误的。如果是这样,请纠正我。这应该足以给出一般的想法。

答案 1 :(得分:0)

我将尝试使用不同的方法在我的问题链接中使用“水平堆积条形图”来实现图表。