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


PHP foreach loop only incrementing once every other iteration

这个真的让我很困惑,所以谢谢你的帮助。我试图输出SQL结果集的值,但foreach循环似乎迭代了两次,然后递增数组索引。这样,如果我的DB行包含连续整数1,2,3,4,5,则foreach循环的输出为1,1,2,2,3,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。有什么想法吗?谢谢

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

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

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

Mysql COL:A|B|CMysql VAL:1|2|3

将在执行mysql_fetch_array函数后返回一个如下所示的数组:

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

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

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

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

更改

    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>";
}

并告诉我您的输出是什么…