【发布时间】:2011-04-23 13:10:20
【问题描述】:
问题:为什么我不能将元素推送到一个二维数组中,该数组位于解析 SQL 结果集的 while 循环内?
我需要一些帮助来了解为什么会发生这种情况。数据存储到二维数组的方式可以有多种方式,但就我的目的而言,我需要使用 push 方法。
下面是一些有效的代码:
my @tt = (0,1,2,3);
my @t;
push (@t,\@tt);
print "[0][0]:".$t[0][0]."\n";
print "[0][1]:".$t[0][1]."\n";
print "[0][2]:".$t[0][2]."\n";
print "[0][3]:".$t[0][3]."\n";
@tt = (4,5,6,7);
push (@t,\@tt);
print "[1][0]:".$t[1][0]."\n";
print "[1][1]:".$t[1][1]."\n";
print "[1][2]:".$t[1][2]."\n";
print "[1][3]:".$t[1][3]."\n";
输出是:
-------------------------
[0][0]:0
[0][1]:1
[0][2]:2
[0][3]:3
[1][0]:4
[1][1]:5
[1][2]:6
[1][3]:7
这是我遇到的问题
我正在运行一些 SQL 来构建一个包含 X 列数的结果集。要将数据存储到我的数组中,我想我可以使用与上面相同的语法:
while (@results=$sth->fetchrow_array())
{
push(@stu_pool,\@results);
}
我测试了 SQL 并检查了结果集,所以问题与此无关。我也回到了长期的方法,这让我得到了我想要的最终结果。我没有使用push(@stu_pool,\@results);,而是在循环中使用了这段代码:
$stu_pool[$index][0] = $results[0];
$stu_pool[$index][1] = $results[1];
$stu_pool[$index][2] = $results[2];
$stu_pool[$index][3] = $results[3];
$stu_pool[$index][4] = $results[4];
$stu_pool[$index][5] = $results[5];
$stu_pool[$index][6] = $results[6];
$index++;
那么是什么阻止我将元素推入这个数组?它适用于第一个示例,但是当我尝试打印出元素时,它们都是空白的。我正在使用的代码:
print "[0][0]:".$stu_pool[0][0]."\n";
print "[0][1]:".$stu_pool[0][1]."\n";
print "[0][2]:".$stu_pool[0][2]."\n";
print "[0][3]:".$stu_pool[0][3]."\n";
print "[1][0]:".$stu_pool[1][0]."\n";
print "[1][1]:".$stu_pool[1][1]."\n";
print "[1][2]:".$stu_pool[1][2]."\n";
print "[1][3]:".$stu_pool[1][3]."\n";
重复:
为什么 push 方法在 while 循环中不起作用?
【问题讨论】:
-
我将其写为评论,因为它不是您问题的答案,但仍然必须说:将同一行复制粘贴 6 次是个坏主意。使用循环。帮自己一个忙,看看这个演讲:video.google.com/videoplay?docid=-4037440245833870135
-
我只是把它作为一个例子。它简单易读,不会添加额外的元素供人们检查作为问题的可能原因
-
stu_pool的第二维包含的每个数组除了包含7个元素
-
好吧,猴子看猴子做什么。当人们看到这样的代码时,他们会编写这样的代码。
标签: arrays perl reference copy push