2010-10-21 24 views
3

基本上,我查詢數據庫,我需要得到的數組轉換成哈希值。在Perl中,如何將我從數據庫讀取的數組轉換爲散列?

我查詢數據庫如下

my $sth = $dbw->prepare($sql); 
while (@rows = $sth->fetchrow_array()) { 
... 
... 
} 

現在,我需要創建一個散列,使得行[0]是關鍵和行[1],行[2],行[3]是價值。對於每個記錄讀取,一個新的哈希鍵必須生成和相應的值設置

如果我的表看起來像

abc 2.3 2.4 2.5 
def 3.2 3.3 3.4 
ijk 4.5 4.6 4.7 

第一個記錄是閱讀和ABC的關鍵和數字的值。 ..所以上

回答

6
my %hash; 

while (my @fields = $sth->fetchrow_array()) { 
    $hash{$fields[0]} = [ @fields[1..$#fields] ]; 
} 
+0

如何哈希看看在這種情況下?是像'$行[0] => @ var' – Aks 2010-10-21 13:01:33

+0

@Aks:哈希值是標量。因此,它是'$行[0] => \ @ var' – 2010-10-21 13:06:27

+0

對不起。我不知道什麼\ @意味着 – Aks 2010-10-21 13:22:29

4
my %mealsizes; 
my $sth = $dbw->prepare($sql); 
while (@columns = $sth->fetchrow_array()) { 
    my $dayname = shift @columns; 
    $mealsizes{$dayname} = [@columns]; 
} 

這裏的構造和使用的數組引用的圖示。

#!/usr/bin/perl 
# 
use strict; 
use warnings; 

my %h; 
while (<DATA>) { 
    my @columns = split; 
    my $k = shift @columns; 
    $h{$k} = [@columns]; 
} 

for my $k (sort keys %h) { 
    print "$k => ", join(', ', @{$h{$k}}), "\n"; 
} 

__DATA__ 
abc 2.3 2.4 2.5 
def 3.2 3.3 3.4 
ijk 4.5 4.6 4.7 
7

你也可以看看selectall_hashref

$hash_ref = $dbh->selectall_hashref($statement, $key_field); 
+0

@downvoter:你能解釋一下爲什麼嗎? – Toto 2010-10-21 14:25:45

+1

我不是你給這一評論的downvoter,但是這並沒有回答提出的問題。 – 2010-10-21 14:38:20

+0

@Kinopiko:對於我來說,這給出了一個hashref,其中包含通過一個鍵索引的檢索行,這就是OP想要的或我缺少的東西。 – Toto 2010-10-21 14:48:04

相關問題