【发布时间】:2021-06-20 09:29:36
【问题描述】:
我将 Perl 与 MySql 一起使用。我有一个查询,我正在使用 fetchall_arrayref 从我的调查应用程序中获取结果数据。根据文档的建议,我使用 foreach 循环遍历 fetchall_arrayref。在这个循环中,我遍历我的 $answer1 数据并运行一个计数器来计算一个问题的所有答案,我想要总数。当我将此信息推送到数组中并尝试获取该数组中的最后一个元素时,我没有得到所需的输出。我在我的 fetchall_arrayref foreach 循环之外运行了一个测试,使用相同的逻辑,它成功地得到了我需要的东西。
这是我的代码:
my $testQuery = "SELECT questionNum, question, answer1 FROM results WHERE title = ? ORDER BY questionNum";
my $sty = $dbh->prepare($testQuery);
$sty->execute($marathon);
my $potential = $sty->fetchall_arrayref();
$sty->finish;
my $previous_question;
my $previous_answer;
my $countEm;
my @total;
my @totalAnswer;
my @norm;
my $last_arr_index;
foreach my $data (@$potential) {
my ($questionNumber, $question, $answer1) = @$data;
$answeredOne = 0;
print qq{<tr><td>$questionNumber. $question</td></tr>} unless $previous_question eq $question;
if ($answer1 ne "" && $questionNumber == 1){
$optionOne = $answer1;
$answeredOne = $answeredOne + 1;
$countEm++;
push @total, $countEm;
push @totalAnswer, $optionOne;
}
if ($answeredOne != 0){
#my $elementCount = scalar(@total);
#say $elementCount;
say @total[-1];
}
$previous_question = $question;
$previous_answer = @totalAnswer[2];
}#end foreach
当我打印时:“说@total[-1];”当我只需要“3”时,给我“1 2 3”的输出。
我在 fetchall_arrayref foreach 循环之外测试了同样的逻辑,我得到了想要的输出:
my $counting;
my @totalCounting;
my @link = ('water', 'water', 'water', 'water', 'water');
foreach my $i (@link){
$counting++;
push @totalCounting, $counting;
}
say @totalCounting[-1];
"说总计数[-1];"给我“5”。
为什么这在 fetchall_arrayref 中不起作用?
【问题讨论】:
-
在一种情况下,您循环打印总计。另一种情况,你不要如果你只想做一次,不要把它放在一个循环中!
-
使用
@total的整个想法是有缺陷的。最后的计数就是你想要的,这已经在$countEm -
当您使用
"@foo"将数组插入字符串时,它将用空格连接值(实际上是$,)。您没有在此处执行此操作,但您应该看到最后一个值3并警告它应该写成$total[-1]。 -
@ikegami 我使用“@total”,因为我无法从 $countEm 中获取最后一个元素 (3)。有没有另一种方法可以在不将它们放入数组的情况下获取 $countEm 的最后一个数字?
-
@simbabque 嘿。我也尝试了 $total[-1] 并且仍然得到: 1 2 3 打印。我不明白。