2011-02-17 65 views
0

喜的哈希所有 我,我不能在阵列问题与阵列

sub nextWords{ 
    for my $language(0 .. $#language) 
    { 
     my $eng = $db->selectall_arrayref("select word from words 
      left outer join language 
      on words.languageId = language.languageId 
      where words.languageId = $language 
      order by word asc 
     ;"); # @language[$id] limit 10 offset $currentOffset 

     #%returnArray2d = (@language[$language] =>[@$eng]); 
     $returnArray2d{@language[$language]} = [@$eng]; 
    } 
    return %returnArray2d; 
} 

的哈希返回值和关键的问题我真的不能恢复的话所有的列表

my %newwordsList =NextWords(); 
    foreach my $key(keys %newwordsList) 
    { 
     print "here you are 2 : " . $key . "\n"; 
     for my $ind(0 .. @{$newwordsList{$key}}){ 
     print "dzo" . $newwordsList{$key}[$ind] . "\n"; 
    } 
} 

output: $key ==> 132 not 123 

,不能打印的字..它只是打印一些

ARRAY(0x320d514) 
ARRAY(0x320d544) 
ARRAY(0x320d574) 
ARRAY(0x320d5a4) 
ARRAY(0x320d5d4) 
ARRAY(0x320d604) 

请帮助..谢谢

回答

1

看起来你没有正确设置%returnArray2d。

假设@language包含所需语言ID,而不是:

$returnArray2d{ @language[$language] } = [@$eng]; 

你会想这样的:

$returnArray2d{ $language[$language] } = [@$eng]; 

此外,你应该避免使用同一名称的数组和一个标量值(它的工作原理,但它很混乱)(请参阅代码中的@language/$ language)。

最后,你是正确的,通过%neww​​ordsList的每个键遍历,但是,你会想从迭代减去1,让你不走过去的数组的末尾:

for my $ind (0 .. @{ $newwordsList{$key} }) { 

应该是:

for my $ind (0 .. @{ $newwordsList{$key} } - 1) { 

或(如大卫在评论中指出的),你可以这样做:

for my $ind (0 .. $#{ $newwordsList{$key} }) { 
+0

另外, (我的($ language_id,$ words)= each%neww​​ordsList) { print“$ language_id @ $ words \ n”;您的打印语句可能对您更好: ` (0 .. $#{$ newwordsList {$ key}}){`to`为我的$ ind(0 .. @ {$ newwordsList {$ key}}){`with`替换`` – l8nite 2011-02-17 20:10:51