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]異なる値ごとに2つの値(つまり、1000〜400)を互いに減算し、$data[0]それを出力することです。これを行う方法がわかりません。助けてくれてありがとう。

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 に答える