1

任何人都可以帮忙 - 这让我发疯。

我正在调用一个 mysql 表并希望多次显示结果(或使用 if 语句检查结果)。但在这个循环中(见下文),它只在第一个实例($i=1)中将表及其行作为数组调用。此代码将构建 20 个名为 Box 的 div,但仅使用表数据填充第一个 div。为什么?

我认为我应该在外部循环中使用 foreach 循环(我已经让它在 wordPress 中与那个 btw 一起工作)但无法弄清楚语法。任何帮助将非常感激。

$i=1;
while ($i <= 20)
{
    echo "<div class=\"Box ".$i."\">";
    echo $i;
    echo "<br>";
    while ($row = mysql_fetch_array($result))
    {
    echo $row['name'];
    }
    echo "</div>";
    $i++;

}
4

5 回答 5

1

如果我理解,您正试图在一个循环中多次使用相同的结果资源。

在第一次循环结果资源后,您需要将其倒回到原来的位置才能再次循环。它可以用 重绕mysql_data_seek($result, 0),但更好的策略是在循环之前将整个内容加载到数组中,然后在每个循环中迭代数组:

// Load everything into the array `$results` first.
$results = array();
while ($row = mysql_fetch_assoc($result)) {
  $results[] = $row['name'];
}

// Better an incremental for loop than a while with a counter
// for a situation where you know the endpoint values of $i
for ($i = 1; $i <= 20; $i++)
{
    echo "<div class='Box $i'>";
    echo $i;
    echo "<br>";
    // Inside your HTML, use the $results array 
    // rather than the MySQL resource
    foreach ($results as $row)
    {
      echo $row['name'];
    }
    echo "</div>";
}
于 2012-07-04T12:21:38.937 回答
1

也许我不太明白,但你应该试试这个:

$i=1;
while ($row = mysql_fetch_array($result) && $i <= 20) {
    echo "<div class=\"Box ".$i."\">";
    echo $i;
    echo "<br>";
    echo $row['name'];
    echo "</div>";
    $i++;
}

因为在您的代码中,您在第一个循环中执行“mysql 循环”。

于 2012-07-04T12:21:58.767 回答
0

尝试这样做,

$i=1;
while ($row = mysql_fetch_array($result))
{
    echo "<div class=\"Box ".$i."\">";
    echo $i;
    echo "<br>";
    echo $row['name'];
    echo "</div>";
    $i++;

}
于 2012-07-04T12:20:10.350 回答
0

一旦给出 mysql_fetch_array($result),$result 就不能再次用于获取。所以它不会循环工作。更好地将结果存储在数组中并在需要的地方使用它。

于 2012-07-04T12:21:38.153 回答
0

您可以使用 mysql_data_seek 重置为结果指针,如果您想再次遍历它们,请执行以下操作:

mysql_data_seek ( $result, 0 );
于 2012-07-04T12:46:32.353 回答