2009-10-29 66 views
2

我想將表格中的單元格值與標題相關聯。標題未知,因爲它是由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 |  |  |  |  | 
+--------+--------+--------+-------+-------+-------+-------+ 
+0

你的問題有點難以回答。你有什麼代碼可以告訴我們嗎?也許如果你嘗試做某些事情,然後在卡住時問一個問題? – 2009-10-29 02:41:33

回答

2

下面是使用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; 
+0

這就像魔法。謝謝思南。 – Stephen 2009-10-29 03:36:09

+0

確實如此。 – innaM 2009-10-29 09:26:20

相關問題