我希望在困扰我的问题上寻求智慧。我有一个返回这样结果的数据库查询:
Ingredients ID
fish 1
salt 1
pepper 1
tomato 2
veggies 2
milk 2
.
.
.
我如何使用ID作为键并将值作为值存储到哈希值中? 像这样:
关键(1)值(鱼,盐,胡椒)
关键(2)值(番茄,蔬菜,牛奶)等
在块内
my %results;
while( %result = $dbh->fetchrow_as_hashtable() ){
%results{'ID'} = %result{'ID'};
%results{'Ingredients'} = %result{'Ingredients'}
}
为什么我感到困惑的问题是1 ID(餐)可能有很多成分。将提取的数据放入哈希图会让我困惑。
答案 0 :(得分:1)
如果您拨打fetchrow_hashref
,每条记录都将作为hashref返回。您可以使用它来形成arrayrefs的散列。
my $sth = $dbh->prepare($query);
$sth->execute;
my %result;
while ( my $rec = $sth->fetchrow_hashref ) {
# @{...} dereferences the hash value as an array
# and a value is then pushed into that array
push @{ $result{ $rec->{ID} } }, $rec->{Ingredients};
}
use Data::Dumper;
print Dumper \%result;
%result
现在应该包含:
%result = (
1 => [qw( fish salt pepper )],
2 => [qw(tomato veggies milk )],
);
答案 1 :(得分:0)
我猜你应该使用数组的哈希,比如:
%results = (
'1' => [ 'fish','salt','pepper'],
'2' => [ 'tomato' ,'veggies','milk'],
);
或者您应该将成分推送到数组中,例如:
push( @{$results{1}}, 'salad'))