-1

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

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

问题:

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

  2. 您是否知道另一个类似于我的表格的示例,它可以编程创建按小时细分的一天的时间表,可以让事件扩展超过一个小时?

代码:

<?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;

?>
4

2 回答 2

1

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

而不是使用,您可以只使用带有递增变量foreach的常规循环,用于在数组的索引处获取每个变量。然后,如果您发现一个事件,您可以增加额外的持续时间,从而减少单元格。fori$timeii<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,所以我的语法可能是错误的。如果是这样,请纠正我。不过,这应该足以给出总体思路。

于 2012-07-14T16:51:40.833 回答
0

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

于 2012-07-14T20:06:33.263 回答