Re: [PHP] Creating a table with merged cells
- From: robert@xxxxxxxxxxxxx (Robert Cummings)
- Date: Thu, 23 Aug 2007 10:57:49 -0400
On Thu, 2007-08-23 at 15:59 +0200, Phpmanni wrote:
Hi
I need to represent a sort of map. The map is a rectangular
table of size X in widht and Y in height, so that I have X*Y
square cells. I need to record in a database some infos for
each cell.
This is easy, I thought to use a record that is something
like (X,Y,MyData), so with two nested loops I can create the
HTML table with data in it.
The problem is that I need to join adjacent cells, so that I
can obtain bigger cells made of base little square cells.
So, starting from a table like this (see with fixed size font)
+-+-+-+-+-+-+-+-+-+
| | | | | | | | | |
+-+-+-+-+-+-+-+-+-+
| | | | | | | | | |
+-+-+-+-+-+-+-+-+-+
| | | | | | | | | |
+-+-+-+-+-+-+-+-+-+
I must find a way to store in the database a table like this
+-+-+-+-+-+-+-+-+-+
| 2 | | | |4 cells|
+-+-+-+-+-+-+-+-+-+
| |BIGBIGB| | | | |
+-+BIGBIGB+-+-+-+-+
| |BIGBIGB| | | | |
+-+-+-+-+-+-+-+-+-+
I thougt to use a record like (X,Y,XWIDTH,YHEIGHT,DATA), but
I cannot imagine the way to create the resulting HTML table.
Using graphics will be a lot easyer, but I must insert
combos and checkboxes into the cells, so I must use html...
Any ideas?
HTML tables are encoded in HTML from top row to bottom row and left cell
to right cell. As such I would suggest storing in the database the
colspan and rowspan for any given cell. Then when retrieving the cells
you can loop through and use colspan and rowspan as necessary with a
little bit of bookkeeping to know when to skip. For instance, let's say
you have the exact table above:
<?php
// $cells = result_of_magical_query(); // ordered by y, then x
$cells = array();
$cells[] = array( 'x' => 0, 'y' => 0, 'cols' => 2, 'rows' =>
1, 'data' => '2', );
$cells[] = array( 'x' => 2, 'y' => 0, 'cols' => 1, 'rows' =>
1, 'data' => '', );
$cells[] = array( 'x' => 3, 'y' => 0, 'cols' => 1, 'rows' =>
1, 'data' => '', );
$cells[] = array( 'x' => 4, 'y' => 0, 'cols' => 1, 'rows' =>
1, 'data' => '', );
$cells[] = array( 'x' => 5, 'y' => 0, 'cols' => 4, 'rows' =>
1, 'data' => '4 cells', );
$cells[] = array( 'x' => 0, 'y' => 1, 'cols' => 1, 'rows' =>
1, 'data' => '', );
$cells[] = array( 'x' => 1, 'y' => 1, 'cols' => 4, 'rows' =>
2, 'data' => 'BIGBIGB<br />BIGBIGB<br />BIGBIGB', );
$cells[] = array( 'x' => 5, 'y' => 1, 'cols' => 1, 'rows' =>
1, 'data' => '', );
$cells[] = array( 'x' => 6, 'y' => 1, 'cols' => 1, 'rows' =>
1, 'data' => '', );
$cells[] = array( 'x' => 7, 'y' => 1, 'cols' => 1, 'rows' =>
1, 'data' => '', );
$cells[] = array( 'x' => 8, 'y' => 1, 'cols' => 1, 'rows' =>
1, 'data' => '', );
$cells[] = array( 'x' => 0, 'y' => 2, 'cols' => 1, 'rows' =>
1, 'data' => '', );
$cells[] = array( 'x' => 5, 'y' => 2, 'cols' => 1, 'rows' =>
1, 'data' => '', );
$cells[] = array( 'x' => 6, 'y' => 2, 'cols' => 1, 'rows' =>
1, 'data' => '', );
$cells[] = array( 'x' => 7, 'y' => 2, 'cols' => 1, 'rows' =>
1, 'data' => '', );
$cells[] = array( 'x' => 8, 'y' => 2, 'cols' => 1, 'rows' =>
1, 'data' => '', );
$skip = array();
$rows = array();
foreach( $cells as $cell )
{
if( $cell['cols'] < 1 )
{
$cell['cols'] = 1;
}
if( $cell['rows'] < 1 )
{
$cell['rows'] = 1;
}
if( isset( $skip[$cell['y']][$cell['x']] ) )
{
continue;
}
$data = $cell['data'];
if( trim( (string)$data ) === '' )
{
$data = ' ';
}
$rows[$cell['y']][$cell['x']] =
'<td'
. ($cell['cols'] > 1 ? ' colspan="'.$cell['cols'].'"' :
'')
. ($cell['rows'] > 1 ? ' rowspan="'.$cell['rows'].'"' :
'')
.'>'
.$data
.'</td>';
for( $i = 0; $i < $cell['rows']; $i++ )
{
for( $j = 0; $j < $cell['cols']; $j++ )
{
$skip[$cell['y'] + $i][$cell['x'] + $j] = true;
}
}
}
foreach( array_keys( $rows ) as $rowIndex )
{
$rows[$rowIndex] = implode( '', $rows[$rowIndex] );
}
$table = '<table border="1">';
if( $rows )
{
$table .=
'<tr>'.implode( '</tr><tr>', $rows ).'</tr>';
}
$table .= '</table>';
echo $table;
?>
Cheers,
Rob
--
............................................................
SwarmBuy.com - http://www.swarmbuy.com
Leveraging the buying power of the masses!
............................................................
.
- References:
- Creating a table with merged cells
- From: "Phpmanni"
- Creating a table with merged cells
- Prev by Date: Re: Recompiling PHP with mssql
- Next by Date: SQL Injection protection
- Previous by thread: Re: [PHP] Creating a table with merged cells
- Next by thread: Re: [PHP] Creating a table with merged cells
- Index(es):
Relevant Pages
|