我试图通过使用do {....}从数组中生成pull key => value对,而{在数组中有值。

我正在使用一个函数来查询mysql,然后在数组中插入所有值

function table_array($query) {

    $table_array = array();
    $data_fetched = false;
    while ($array = mysql_fetch_assoc($query)) {
        if (!$data_fetched) {
            foreach ($array as $key => $value) {
                $table_array[$key] = $value;
                //$data_fetched = true;
                } 
            }
        }
    return $table_array;
}

然后我使用另一个循环从数组中提取数据

function get_table($table_array) {


    $header_written = false;
    echo "<table border=1>";

    if ($table_array) {

        do {
            echo "<tr>";
            foreach ($table_array as $columns => $values) {
                echo "<td> {$values} </td>";
                }
                echo "</tr>";

        }while ($table_array);

        }
        echo "</table>";
    }

然而,这导致我的循环无限运行,为什么我不能使用它就像我在mysql_fetch_assoc为真时一样。

我尝试使用一个标志,但只有一个记录被提取后才会停止运行。

===============>>#1 票数:2

你真正需要的是两个foreach循环。 外部迭代遍历行,内部遍历列:

echo "<table>";
// Iterates over rows
foreach ($table_array as $row) {
  echo "<tr>";
  // Iterates over columns (table cells)
  foreach ($row as $col=>$value) {
    echo "<td>{$value}</td>";
  } 
  echo "</tr>";
}
echo "</table>";

虽然您的提取过程有效,但可以简化和改进。 您不需要foreach$table_array分配列。 您可以使用[]语法简单地附加整个获取的行。 不确定$data_fetched的用途是什么,所以我也删除了它

 while ($array = mysql_fetch_assoc($query)) {
        // Use the [] syntax to append the whole row onto $table_array
        // No need to add each column of the fetched row separately
        $table_array[] = $array;        
  }

最后,它不能像你设置你做的那样工作的原因是迭代常规数组与从MySQL结果集中获取不相似。 当没有行保留时,fetch调用最终将返回FALSE。 除非您在迭代数组时主动从数组中删除元素,并最终删除空数组,否则它将始终求值为布尔值TRUE。

===============>>#2 票数:0

你需要使用foreach($array as $key => $value){ ... }或者do{ ... } while ($array)

您不应该同时使用两者,因为您只有一组数据要循环。 我会坚持使用foreach,因为它更安全,并且可以完全满足您的需求。

如果您觉得需要使用do / while,那么每次进入循环时都需要从$ table_array中弹出一个值。 这样,$ table_array在某些时候将变为空。 目前,在您的代码中,$ table_array始终是满的,因此while循环会无休止地继续。

  ask by Moshe translate from so

未解决问题?本站智能推荐: