循环遍历数组数组时无法获取值

时间:2011-11-03 20:57:11

标签: perl

我创建了一个这样的数组:

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 ????;
}

谢谢!

2 个答案:

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