2011-02-28 176 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