PHP - 解释一下这个 while/for 循环给我

3

我是PHP新手,现在卡在了理解这个基本的while/for循环上。我想澄清几点。以下是代码:

while ($row = $sth->fetch (PDO::FETCH_NUM))
{
  print ("<tr>\n");
  for ($i = 0; $i < $sth->columnCount (); $i++)
   {
     print ("<td>" . htmlspecialchars ($row[$i]) . "</td>\n");
   }
   print ("</tr>\n");
}

我知道while循环正在评估真假,所以它正在获取查询结果集,然后打印标签。
然而,我遇到了困难。
for ($i = 0; $i < $sth->columnCount (); $i++)

我知道第一个表达式只被评估一次,第二个表达式在开始时被评估且只有为真时才继续执行,第三个表达式增加了1。但是从字面上讲,这些是什么意思,为什么它是“columnCount”?

4个回答

1

这是一个PDO数据库设置。

字面上来说,$row是从数据库中获取的一行,来自于在语句中的代码,而这段代码没有被剪切。然后它将迭代器发送到该行的每个字段中(通过columnCount函数(http://php.net/manual/en/pdostatement.columncount.php)获取其编号),并打印出一些HTML。

一般来说,这种类型的迭代器是'不太理想'的代码,原因有几个。通常,PHP中的编程实践更喜欢使用foreach而不是for迭代器,除非我们在通过时确实需要计数,这也是为什么fetch被执行为FETCH_NUM,尽管它从未被使用。

while ($row = $sth->fetch())
{
  print ("<tr>\n");
  foreach ($row as $key=>$value)
   {
     print ("<td>" . htmlspecialchars($value) . "</td>\n");
   }
   print ("</tr>\n");
}

非常感谢!直接看到它有很大的帮助。所有的答案都很有用。所以,本质上,那个for循环创建了一种浏览行列的方式?for代码部分循环直到达到列末尾,然后while部分继续循环?感谢大家帮助我理解这个问题。 - Timothy Fisher

1
该行的作用是使得可以迭代特定 $row 的每一列。$sth->columnCount() 返回似乎是一个表数据结构的列数。
另一方面,for 循环将执行 print 语句 i 次,其中 i 在起始时为 0,并且将自增为 $sth->columnCount() 减 1 的数量。
为什么要减 1?
因为通常在编程中,你从 0 开始计数而不是 1。
所以 $row[0] 表示你的行的第一列,$row[1] 表示第二列,依此类推,直到达到最后一列,即 $row[$sth->columnCount() - 1]。

谢谢!所有的答案都帮助我理解了这个问题。 - Timothy Fisher

0

for循环从数据集的开头开始评估,直到达到数据集的末尾。

数据集将始终从0开始,直到$i不再小于columnCount()方法返回的值才会继续执行。

$sth是一个实例化对象(变量),它有一个名为columnCount()的方法。该方法可能返回$sth所表示的列的总数。

可能也可以把这个for循环重写为while循环:

$i = 0;
while($i < $sth->columnCount()) {
    // do something
    $i++;
}

很好的信息,以及不同的思考方式,谢谢! - Timothy Fisher

0

这将迭代一行中的所有字段。

columnCount() 返回语句中字段的数量。

因此,如果您的语句是:

SELECT a,b,c,d FROM test;

columnCount() 返回 4。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接