3

我正在尝试为我的 fetchall_arrayref 中的每个值执行一个 foreach 循环,但遇到了一些麻烦。

我有:

my $list = $sth->fetchall_arrayref({});
print Dumper($list);

这给了我:

$VAR1 = [
          {
            'ID_NUMBER' => '123'
          },
          {
            'ID_NUMBER' => '456'
          },
          {
            'ID_NUMBER' => '5666'
          },
          {
            'ID_NUMBER' => '45645'
          },
          {
            'ID_NUMBER' => '23422'
          }
        ];

我不确定如何格式化我的 foreach 循环打印每个 id_number 的值。最终我想对每个值运行一个查询,但是一旦我开始工作,我就可以弄清楚。

谢谢你的帮助。

4

3 回答 3

6

你应该使用fetchrow_hashref,并单独做每一个。这将使它更具可读性,并且从数据库的角度来看,它不会影响性能。

while (my $res = $sth->fetchrow_hashref) {
  print Dumper $res;
  $sth2->execute($res->{ID_NUMBER});
}

如果你想用 来做fetchall_arrayref,它会像这样工作:

my $list = $sth->fetchall_arrayref({});
foreach my $res (@{ $list }) {
  $sth2->execute($res->{ID_NUMBER});
}
于 2013-10-18T14:31:51.757 回答
1

您所拥有的是对哈希引用数组的引用。

让我们分解一下:

$list是对数组的 _reference。II 可以通过在它之前放置正确的解引用符号来 _dereference 它。您可以使用@$listor获取数组@{ $list }。我喜欢后一个,因为它使参考的事实非常清楚。

for my $row_ref ( @{ $list } ) {
    here be dragons...    # We'll figure this out later...
}

$row_ref是对哈希的引用。%我们可以通过在前面再次获得哈希: %{ $row_ref }。因此,我们可以使用%{ $row_ref }{$key}来获取值。但是,这种语法很难阅读。我们可以使用如下->所示的替代方案:$row_ref->{$key}. 这更容易看到。我们也知道有一把钥匙,钥匙是ID_NUMBER

for my $row_ref ( @{ $list } ) {
    print "ID Number: " . $row_ref->{ID_NUMBER} . "\n";
}

或者,如果您不确定列名:

for my $row_ref ( @{ $list } ) {
    for my $column ( sort keys %{ $row_ref } ) {
       print "$column: " . $row_ref->{$column} . "\n";
    }
}

如果您不熟悉参考资料,请阅读Perl 教程

于 2013-10-18T15:29:02.060 回答
0

你有一个哈希数组。如果您使用描述性变量名称,它会有所帮助。

my $rows = $sth->fetchall_arrayref({});;
for my $row (@$rows) {
   print($row->{ID_NUMBER}, "\n");
}
于 2013-10-18T16:18:25.410 回答