2016-01-30 22 views
3

我是PHP新手,我試圖理解這個基本的while/for循環。有幾件事我只是想澄清。下面是代碼: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"); 
} 

我知道而被評估爲true,所以它得到的查詢結果集,然後打印標籤。

但是我卡上的

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

我知道,第一個表達式一次,第二次評估開頭且僅當它是真實的移動,並通過+1第三增量。但是,這在字面意義上究竟是什麼,爲什麼它是「columnCount」?

回答

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"); 
} 
+0

謝謝你一堆!從字面上看,它有很大的幫助。所有的答案都很有幫助。所以基本上,for循環創建一種方式來瀏覽行的列?代碼的for部分循環直到到達列的末尾,然後while部分繼續循環?謝謝大家幫我把這個包裹起來。 –

0

for循環從數據集的開始處開始並進行評估,直至達到數據集的末尾。

數據集將始終從0開始,直到$i不再小於columnCount()的值,它將繼續。

$sth是一些實例化的對象(變量),它有一個名爲columnCount()的方法。該方法可能會返回$sth所代表的列的總數。

它也可以幫助說,這個for循環可改寫爲while循環:

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

好信息和不同的方式來想想它,謝謝! –

0

這將通過一個行的所有領域進行迭代。

columnCount()返回您的語句中的字段數。

所以,如果你的說法是:

SELECT a,b,c,d FROM test;

信息columnCount()的返回4.

1

那行代碼使得迭代特定$行的每一列成爲可能。$ sth-> columnCount()返回n對於什麼似乎是表格數據結構的列。

另一方面,for循環將執行打印語句i次,其中我在啓動時將爲0,並將自身增加爲由$ sth-> columnCount()減1返回的列數。

爲什麼減1?

因爲平時在節目開始從0而不是1

所以$行[0]代表你行,$行的第1列計數[1]表示第二列,依此類推,直到你到達最後一列是$ row [$ sth-> columnCount() - 1]

+0

謝謝!所有的答案幫助我理解這一點。 –