我需要知道在Perl中创建关联数组的方法。
基本上我现在的代码实现如下:
my $getEmployeeListOfTeamQuery = "SELECT profiles.userid
FROM user_group_map,profiles
WHERE user_group_map.group_id = $teamId
AND profiles.userid = user_group_map.user_id
AND profiles.active = 'y'
AND profiles.login_name NOT LIKE 'qa_%'
AND profiles.disabledtext = ''
GROUP BY profiles.login_name
ORDER BY profiles.login_name";
my $getEmployeeListOfTeam = $dbh->prepare($getEmployeeListOfTeamQuery);
$getEmployeeListOfTeam -> execute();
my @techs = ();
while(my ($tech) - $getEmployeeListOfTeam->fetchrow_array) {
push @techs,$tech;
}
所以上面的代码将在$ getEmployeeListOfTeamQuery中进行查询,将数组名称创建为techs。
然后尝试将值推送到数组中。
这里工作正常。
我的问题是关于创建关联数组。
那就是我需要查询如下:“SELECT profiles.userid,profiles,username .....”
因此我需要创建一个关联数组,其中“userid”为键,“username”为值。
答案 0 :(得分:3)
我担心你用来学习Perl的资源。自从Perl 5在二十多年前发布以来,Perl程序员还没有使用术语“关联阵列”。我们现在将这些结构称为“哈希”。如果您从使用术语“关联数组”的资源中学习,那么它们几乎肯定是过时的。
但是,回答你的问题。代码非常简单。
my $sql = 'select profiles.userid, profiles.username...';
my $sth = $dbh->prepare($sql);
$sth->execute;
my %techs_hash;
while (my @row = $sth->fetchrow_array) {
$techs_hash{$row[0]} = $row[1];
}
答案 1 :(得分:2)
使用selectcol_arrayref()
和Columns
属性:
my $aref = $dbh->selectcol_arrayref('select userid, login_name ...', {Columns => [1, 2]});
my %hash = @$aref;
答案 2 :(得分:0)
通过调用selectall_hashref:
,可以将所有行提取到哈希哈希值中 my $tech=$dbh->selectall_hashref("select profile.userid, profiles.username, ...",'userid');
或者您可以使用属性为{Slice=>{}}
的selectall_arrayref将所有行提取到哈希数组中:
my $tech=$dbh->selectall_arrayref("select profile.userid, profiles.username, ...",{Slice=>{}});
然后将其转换为所需的哈希值(这正是您想要的):
my $result;
$result->{$_->{userid}}=$_->{username} foreach @$tech;
答案 3 :(得分:0)
my @l;
while(my $h = $sth->fetchrow_hashref){
push @l,$h;
}
my %hash;
map { $hash{$_->{userid}} = $_->{username} } @l;