我是PHP的新手,我一直试图理解这个基本的/ 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。但这究竟是用文字术语做的,为什么它是&#34; columnCount&#34;?
答案 0 :(得分:1)
这是一个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");
}
答案 1 :(得分:1)
该行的作用是可以迭代特定$行的每一列。 $ sth-&gt; columnCount()返回表格数据结构的列数。
另一方面,for循环将执行print语句i次,其中i在启动时将为0,并且将自身增加为$ sth-&gt; columnCount()返回的列数减1
为什么减1?
因为通常在编程中你从0而不是1开始计数。
所以$ row [0]代表你行的第一列,$ row [1]代表第二列,依此类推,直到你到达最后一列$ row [$ sth-&gt; columnCount() - 1]
答案 2 :(得分:0)
for循环从数据集的开头开始并进行评估,直到到达数据集的末尾。
数据集始终从0开始,直到$i
不再小于columnCount()的值才会继续。
$sth
是一个实例化的对象(变量),它有一个名为columnCount()
的方法。该方法可能会返回$sth
所代表的列总数。
也可以说这个for循环可以重写为while循环:
$i = 0;
while($i < $sth->columnCount()) {
// do something
$i++;
}
答案 3 :(得分:0)
这将迭代一行的所有字段。
columnCount()
返回语句中的字段数。
所以如果你的陈述是:
SELECT a,b,c,d FROM test;
columnCount()返回4.