将hash hash引入数组ref perl

时间:2015-12-10 10:49:05

标签: arrays perl hash

我从数据库中获取数据...我想要实现的是为每个获取的数据行(id,title)创建一个哈希引用

{
   id => data->[0],
   title => data[1]
}

并将此哈希引用推送到数组引用中,以便创建以下格式

 {  category => [
                   {
                    id => 1,
                    title => "title1"
                   },
                   {
                   id => 2,
                   title => "title2"
                   }
                  ]
              }

我所做的:

   my $productCategories->{category} = [];
    my $product = {};
    my $sth = $dbh->prepare(qq[SELECT id,title FROM ].DB_SCHEMA().qq[.product_categories]) || die $dbh->errstr;
    $sth->execute() || die $dbh->errstr;
    while(my $data = $sth->fetch){
        $product =  {
                    id      =>  $data->[0],
                    title   =>  $data->[1]
                    };
        push $productCategories->{category}, $product;
    }

但它不起作用......

2 个答案:

答案 0 :(得分:4)

DBI有许多获取数据的方法。其中一个被称为fetchall_arrayref(),它将以完全符合您需要的结构的形式返回数据 - 无需自己构建数据。

my $sth = $dbh->prepare(qq[SELECT id,title FROM ] .
                        DB_SCHEMA() .
                        qq[.product_categories])
  || die $dbh->errstr;

$sth->execute() || die $dbh->errstr;

# Pass a hash ref to get each row back as a hash.
$productCategories->{category} = $sth->fetchall_arrayref({});

答案 1 :(得分:3)

启用use strict; use warnings;,它会告诉您原因。

  

推动参考是实验性的

     

不是ARRAY参考

尝试:

push @{$productCategories->{category}}, $product;

另外:小心宣告你push在循环之外的事情 - 在这种情况下你应该没问题,但要记住你正在推动参考。如果您重复使用变量,那么可以最终推送相同的参考。