数组哈希的问题

时间:2011-02-17 19:50:10

标签: perl

大家好 我遇到的问题是我无法返回数组哈希中的值和键

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 个答案:

答案 0 :(得分: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} } ) {