我想从while fetchrow中的数组中获取值...如果这是有道理的。 继承我的代码和输出以帮助解释
while (@data = $STH2->fetchrow_array()) {
print "<tr>";
print "<td>$_</td>" for @data[0,1];
print "</tr>";
并输出
$data[0] | $data[1]
1 | 1000
1 | 400
12 | 500
12 | 150
(每个$data[0]
只输出2个值)
我想要做的是为每个不同的$data[1]
值减去彼此的2 $data[0]
值(即1000-400),然后打印出来。我无法弄清楚如何做到这一点,谢谢你的帮助。
答案 0 :(得分:1)
只需捕获数组引用的哈希值,然后稍后进行减法(警告:未经测试):
my %data_hash=(); #keys: $data[0], values: array ref of $data[1] corresponding to $data[0]
while(@data=$STH2->fetchrow_array)
{
push @{$data_hash{$data[0]}},$data[1];
}
foreach(sort{$a<=>$b}(keys %data_hash))
{
print "<tr>";
print "<td>$_</td>";
my $diff=$data_hash{$_}->[0] - $data_hash{$_}->[1];
print "<td>$diff</td>";
print "</tr>";
}
答案 1 :(得分:1)
似乎散列符合您的目的。 $ data [0]是关键,$ data [1]是值。
类似
my %data;
while (@data = $STH2->fetchrow_array()) {
if (undefined $data{$data[0]}) {
$data[$data[0]} = $data[1];
} else {
$data[$data[0] -= $data[1];
}