-1

PHP の html テーブルから生成された余分なテーブル セルを削除したいと思います。この例の表の最後を参照してください: http://leobee.com/android/push/so/stdt3.php **まだ IE で動作するようにコードを更新していません。gecko ブラウザを使用してください。

jQuery でこの例を見つけました: http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_tr_deletecell。ただし、colspan セルが php で生成された後、余分なセルを削除する必要があります。

質問:

  1. colspan セルが処理された後、php が DOM を操作して表のセルを削除することは可能ですか? 可能であれば、これを理解するプロセス、またはどのメソッドまたはライブラリを調べる必要があるかを規定できますか。

  2. 私のテーブルに似た別の例を知っていますか? プログラムで 1 日のスケジュールを時間別に作成し、イベントを 1 時間以上に拡張することができます。

コード:

<?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 に答える