2011-02-28 170 views
0

我在我的PHP代碼並想更好地理解它:PHP while循環成問題

while($row = mysql_fetch_array($result)){ 
echo $row['name']; 
} 

我怎樣才能把它變成一個「for」循環?我嘗試了,但我不知道如何引用我想要的正確的行... $ row [$ i] ['name']沒有工作...

編輯 - 目標是扭轉回聲的輸出。這樣的成績是其他的方式......我只知道如何與使用$我 - 循環做到這一點 -

+0

這幾乎是不可能的......你爲什麼要呢? – Bobby 2011-02-28 09:04:10

+0

目標是扭轉輸出的回波。所以結果是另一種方式...我只知道如何使用$ i-- – David19801 2011-02-28 09:06:46

+1

for循環來做到這一點反轉輸出更簡單的方法是在您的SQL查詢中使用帶或不帶DESC的ORDER BY – kokosing 2011-02-28 09:29:50

回答

3

找回使用mysql_num_rows的行數,那麼你可以使用一個for -loop:

$count = mysql_num_rows($result); 
for ($i=0; $i<$count; $i++) 
{ 
    $row = mysql_fetch_array($result); 
    echo $row['name']; 
} 

我會使用 「mysql_fetch_assoc」 這一個。

如果你真的需要使用「[$ i] [‘名’]」,你需要的行首先轉移到一個數組:

$rows = array(); 
while($row = mysql_fetch_array($result)) 
{ 
    $rows[] = $row; 
} 

現在您可以訪問如$ row [0] ['name']使用for -loop,如果你真的需要的話。

編輯:

目標是扭轉 輸出的回聲。

要做到這一點可以取所有行到一個數組(使用mysq_fetch_assoc和上述while -loop構建陣列),使用array_reverse扭轉順序,然後一個foreach -loop呼應的元素。儘管如此,沒有for -loop需要)

2

你有沒有嘗試過這樣的事情:

for ($row = mysql_fetch_array($result); $row; $row = mysql_fetch_array($result)) { 
    echo $row['name']; 
} 

在這種方法中,你不需要使用$ i變量。

3
for(;$row = mysql_fetch_array($result);) { 
    echo $row['name']; 
} 

但是爲什麼?

2
for (;;) { 
    if (!($row = mysql_fetch_array($result))) { 
     break; 
    } 
    echo $row['name']; 
} 

認真不過,你不能這裏使用for循環。 mysql_fetch_array只給你下一個排,只要有行。正如你所說的,沒有索引可以引用,因此沒有太多的使用循環索引。

目標是扭轉輸出的回聲。

您在查詢中使用ORDER BY ... DESC/ASC子句來執行此操作。

0

訣竅在此while構建體是,當分配「失敗」,因爲不存在(進一步)的行,因此分配返回false太迭代停止時,即返回mysql_fetch_arrayfalse

要使用for而不是這個while結構,你可以使用mysql_result而不是mysql_fetch_array從結果集中獲取特定的行:

for ($i=0, $n=mysql_num_rows($result); $i < $n; $i++) { 
    $row = mysql_result($result, $i); 
} 
0

你必須設置使用數據庫的順序。

SELECT * FROM表ORDER BYDESC