1

我想从一段时间内获取的数组中获取值 .. 如果这有意义的话。这是我的代码和输出来帮助解释

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]为每个不同的$data[0]值减去 2 个值(即 1000-400),然后打印出来。我无法弄清楚如何做到这一点,谢谢你的帮助。

4

2 回答 2

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>";
}
于 2012-06-27T16:18:22.273 回答
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];
}
于 2012-06-27T16:20:57.533 回答