【问题标题】:PHP - Explain this while/for loop to mePHP - 向我解释这个 while/for 循环
【发布时间】:2016-05-08 10:55:01
【问题描述】:

我是 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 正在评估 true,所以它正在获取查询的结果集,然后打印标签。

但是我卡在了

for ($i = 0; $i < $sth->columnCount (); $i++)

我知道第一个表达式计算一次,第二个在开始时计算,只有在它为真时才继续,第三个增加 +1。但从字面上看,这到底是做什么的,为什么是“columnCount”?

【问题讨论】:

    标签: php loops for-loop while-loop


    【解决方案1】:

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

    数据集将始终从 0 开始,直到 $i 不再小于 columnCount() 的值,它将继续。

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

    说这个 for 循环可以重写为 while 循环也可能会有所帮助:

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

    【讨论】:

    • 很好的信息和不同的思考方式,谢谢!
    【解决方案2】:

    这将遍历一行的所有字段。

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

    所以如果你的陈述是:

    SELECT a,b,c,d FROM test;

    columnCount() 返回 4。

    【讨论】:

      【解决方案3】:

      这是一个 PDO 数据库设置。

      从字面上看,$row 是从数据库中提取的一行,是从上面的代码中获取的,它没有被你删减。然后它向行的每个字段发送一个迭代器(从columnCount 函数(http://php.net/manual/en/pdostatement.columncount.php)获取它的编号,并打印出一些 html。

      一般来说,这种迭代器是“不太理想”的代码,原因有几个。通常,PHP 中的编码实践更喜欢使用 foreach 而不是 for 迭代器,除非我们在通过时确实需要计数,表面上为什么提取是作为 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部分继续循环?感谢大家帮助我解决这个问题。
      【解决方案4】:

      该行的作用是可以对特定 $row 的每一列进行迭代。 $sth->columnCount() 返回似乎是表数据结构的列数。

      另一方面,for 循环将执行打印语句 i 次,其中 i 在开始时为 0,并且将自身增加为 $sth->columnCount() 返回的列数减 1。

      为什么是负1?

      因为通常在编程中你从 0 而不是 1 开始计数。

      所以 $row[0] 代表你的行的第一列,$row[1] 代表第二列,依此类推,直到你到达最后一列 $row[$sth->columnCount() - 1]

      【讨论】:

      • 谢谢!所有的答案都帮助我理解了这一点。
      猜你喜欢
      • 2023-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 1970-01-01
      • 2013-06-12
      相关资源
      最近更新 更多