我创建了一个这样的数组:
while(@results = $execute->fetchrow())
{
my $active = 'true';
if($results[1] == 0)
{
$active = 'false';
}
my @campaign = ($results[0], $active);
push(@campaign_names, @campaign);
}
稍后,当我需要访问广告系列的名称(这是广告系列数组的第一个元素)时,我似乎无法提取它。什么是正确的语法?
foreach $campaign (@campaign_names)
{
print ????;
}
谢谢!
答案 0 :(得分:2)
问题是你正在将数组推到@campaign_names
的末尾,当你想要的是数组引用时。这是我写的方式:
while(@results = $execute->fetchrow())
{
my $active = $results[1] ? 'true' : 'false';
push @campaign_names, [ $results[0], $active ];
}
# later
foreach my $campaign( @campaign_names )
{
my $name = $campaign->[0];
my $active = $campaign->[1];
}
我通过使用三元条件(?:
)来计算$active
的值来清理它。 [ ... ]
构造一个匿名数组引用(指向数组的标量),然后将其推送到@campaign_names
。
当我们稍后循环时,需要注意的两件重要事情是我们在循环变量中使用my
以使其保持在循环块的本地,并且我们使用->
来取消引用元素在数组引用指向的数组中。
答案 1 :(得分:1)
那不是创建一个数组数组。 my @campaign = ($results[0], $active); push(@campaign_names, @campaign);
展平并将$results[0]
和$active
推入@campaign_names
数组。相反,推送一个arrayref:
my @campaign = ($results[0], $active);
push(@campaign_names, \@campaign);
或
my $campaign = [$results[0], $active];
push(@campaign_names, $campaign);
数组只能保存标量值。
您需要在学习时参考perldsc(perldoc perldsc,http://perldoc.perl.org/perldsc.html)