PHP foreach循环仅每隔一次迭代递增一次

时间:2012-01-13 03:41:17

标签: php arrays foreach

这个让我很困惑,所以感谢您的帮助。我试图输出SQL结果集的值,但foreach循环似乎迭代两次,然后递增数组索引。这样,如果我的DB行保持连续的整数1,2,3,4,5,则foreach循环的输出为1,1,2,2,3,3,4,4,5,5。看不出原因。代码如下。

$result = mysql_query("SELECT * FROM Test");

echo "<table border=1><tr></tr>";

While($row = mysql_fetch_array($result))
{
    echo "<tr>";
    foreach($row as $value)
    {
        echo "<td>" . $value . "</td>";
    }
    echo "</tr><tr>";
    for($x=0;$x<5;$x++)
    {
        echo "<td>" . $row[$x] . "</td>";
    }
    echo "</tr>";
}

之后抛出第二个for循环进行调试,以确保该数组实际上不包含每个值的两个实例。但是该循环按预期输出:1,2,3,4,5。有任何想法吗?感谢。

4 个答案:

答案 0 :(得分:4)

默认情况下,mysql_fetch_array的第二个参数设置为MYSQL_FETCH_BOTH,它将在索引下注册每个值以及列的名称。提供MYSQL_FETCH_NUM仅获取数字索引:

while($row = mysql_fetch_array($result, MYSQL_FETCH_NUM)) {
 ...

答案 1 :(得分:0)

mysql_fetch_array使用mysql结果的列名作为键返回一个关联数组,但它也可以通过列号访问它们,所以行:

Mysql COL:A | B | C. Mysql VAL:1 | 2 | 3

在通过mysql_fetch_array函数后,

将返回一个如下所示的数组:

array(
   'A'=>1,
   0  =>1,
   'B'=>2
   1  =>2,
   'C'=>3,
   2  =>3
)

并且foreach循环将遍历定义的和数字键(产生重复)

答案 2 :(得分:0)

另一个选项是执行一个调用键和值的foreach循环。

foreach($row as $key=>$value)

答案 3 :(得分:0)

更改

    While($row = mysql_fetch_array($result))
{
    echo "<tr>";
    foreach($row as $value)
    {
        echo "<td>" . $value . "</td>";
    }
    echo "</tr><tr>";
    for($x=0;$x<5;$x++)
    {
        echo "<td>" . $row[$x] . "</td>";
    }
    echo "</tr>";
}

    While($row = mysql_fetch_array($result))
{
    echo "<tr>";
    foreach($row as $value)
    {
        echo "<td>" . $value . "</td>";
    }
    echo "</tr>";
}

告诉我你的输出是什么......