关联表格单元与标题
问题描述:
我想将表格中的单元格值与标题相关联。标题未知,因为它是由SQL查询生成的 。关联表格单元与标题
作为标题的大小来自SQL返回结果。然后把它放到一个数组中,
@sizes = qw(S36 S37 S38 S39 S40 S41 S42);
现在,如果詹姆斯的大小是S38。
我想他们打印为HTML表大小头:
+--------+--------+--------+-------+-------+-------+-------+
| S36 | S37 | S38 | S39 | S40 | S41 | S42 |
+--------+--------+--------+-------+-------+-------+-------+
| | | James | | | | |
+--------+--------+--------+-------+-------+-------+-------+
我知道如何做到这一点,如果尺寸是行或结果的一部分,而是作为表头?
如何使用Perl来操纵它?
编辑:
我试着总结一下我试过的代码...
SQL查询:
select size from articles where order_number = "3";
获取到一个数组:
while(my $ref = $sth->fetchrow_hashref()) {
$size = "$ref->{'size'}";
push @sizes, $size;
}
说,@sizes
是:
@sizes = qw(S36 S37 S38 S39 S40 S41 S42);
基于尺寸创建HTML头:
+--------+--------+--------+-------+-------+-------+-------+
| S36 | S37 | S38 | S39 | S40 | S41 | S42 |
+--------+--------+--------+-------+-------+-------+-------+
现在,从另一个SQL查询的说,我知道詹姆斯有S38。 如何放入上表的右列单元格。这将是:
+--------+--------+--------+-------+-------+-------+-------+
| S36 | S37 | S38 | S39 | S40 | S41 | S42 |
+--------+--------+--------+-------+-------+-------+-------+
| | | James | | | | |
+--------+--------+--------+-------+-------+-------+-------+
答
下面是使用CGI.pm HTML生成方法做这件事的方式:
#!/usr/bin/perl
use strict;
use warnings;
use CGI qw(:html);
use List::AllUtils qw(first_index);
my @sizes = qw(S36 S37 S38 S39 S40 S41 S42);
my %person = (name => 'James', size => 'S38');
my @row = ('') x @sizes;
$row[ first_index { $_ eq $person{size} } @sizes ] = $person{name};
print start_html,
table({ border => 1 },
Tr(td({width => sprintf('%.0f%%', 100/@sizes)}, \@sizes)),
Tr(td(\@row))),
end_html;
在另一方面,我也爱HTML::Template:
#!/usr/bin/perl
use strict; use warnings;
use HTML::Template;
use List::AllUtils qw(first_index);
my @sizes = qw(S36 S37 S38 S39 S40 S41 S42);
my %person = (name => 'James', size => 'S38');
my @row = (' ') x @sizes;
$row[ first_index { $_ eq $person{size} } @sizes ] = $person{name};
my $tmpl_txt = <<EO_TMPL;
<html><head><style type="text/css">
#size_chart { margin: 0 auto; }
#size_chart td { width: <TMPL_VAR CELL_WIDTH>; border: 2px inset #ddd }
</style></head>
<body><table id="size_chart">
<TMPL_LOOP ROWS><tr>
<TMPL_LOOP CELLS><td><TMPL_VAR CELL></td></TMPL_LOOP>
</tr></TMPL_LOOP>
</table></body></html>
EO_TMPL
my $tmpl = HTML::Template->new(scalarref => \$tmpl_txt);
$tmpl->param(
CELL_WIDTH => sprintf('%.0f%%', 100/@sizes),
ROWS => [ { CELLS => [ map { { CELL => $_ } } @sizes ] },
{ CELLS => [ map { { CELL => $_ } } @row ] },
]);
print $tmpl->output;
你的问题有点难以回答。你有什么代码可以告诉我们吗?也许如果你尝试做某些事情,然后在卡住时问一个问题? – 2009-10-29 02:41:33