我试图使用以下内容展平散列中包含的数组:
foreach my $key (keys %months) {
foreach (%months->{$key}) {
%months->{$key} = $key . ' ' . join(',', %months->{$key});
}
}
我试图生成一连串的日子,如:
"2, 11, 15, 18, 25"
但我明白了:
ARRAY(0x5a2e7b0)
%months
的结构是:
months {
Jan: [1,5,30],
Feb: [2,6]
}
答案 0 :(得分:2)
哈希"中包含的" 数组必须是数组引用,一个标量(哈希值必须是什么)。
因此,当您检索它时,您需要取消引用它
my $date_list = join ', ', @{ $months->{$key} };
您可以从中生成所需的字符串
$months
这假设%
是 hashref ,由问题中的箭头解除引用判断。然后months
前面的foreach my $key (keys %$months) {
say join ', ', $key, @{$months->$key}};
}
错误。还有一个额外的循环。对于显示的数据
say join ', ', $_, @{$months->$_}} for keys %$months;
或
foreach my $key (keys %$months) {
foreach ($months->{$key}) {
say join ', ', @{$months->{$key}->{$_}};
}
}
问题中的代码适用于具有另一级嵌套的数据
say join ', ', $key, $_, @{$months->{$key}->{$_}};
仅加入最后一级的arrayref数据,或
$db = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';', DB_HOST, DB_PASSWORD);
连接两个键和arrayref数据。