PHP循环结果并输出html表tr和td问题

时间:2015-06-12 20:22:56

标签: php mysql

尝试通过循环遍历mysql结果来生成html表列和行。在变量$ row_count和$ col_count:

中定义的行和列
$id = $_GET['id'];
$sql = "SELECT * FROM $table WHERE id = {$id}";
$result = $db->query($sql);

if($result->num_rows) {
while($row = $result->fetch_object()) {
    $row_count = $row->rows;
    $col_count = $row->cols;
    $fields = $row->fields;
    $data = json_decode($fields);

    foreach($data as $value) {
        echo '<td>' . $value . '</td>';

        for($i = 0; $i < $col_count; $i++){
            echo '</tr><tr>';
        }
    }
}
$result->free();
}

截至目前,这产生的结果如下:

 <table>
 <td>row1-data1</td></tr><tr></tr><tr></tr><tr></tr><tr><td>row1-data2</td></tr><tr></tr>      <tr></tr><tr></tr><tr><td>row1-data3</td></tr><tr></tr><tr></tr><tr></tr><tr><td>row1-data4</td></tr><tr></tr><tr></tr><tr></tr><tr><td>row2-data1</td></tr><tr></tr><tr></tr><tr></tr><tr><td>row2-data2</td></tr><tr></tr><tr></tr><tr></tr><tr><td>row2-data3</td></tr><tr></tr><tr></tr><tr></tr><tr><td>row2-data4</td></tr><tr></tr><tr></tr><tr></tr><tr>        </table>

所有数据不应该根据$ row_count的值进入一个表行,而应分为多行。

3 个答案:

答案 0 :(得分:1)

按列数每行拆分数组并使用标记收回

$chunk = array_chunk($data, $col_count);

foreach ($chunk as $row) 
  echo '<tr><td>' . implode('</td><td>', $row) . '</td></tr>';

答案 1 :(得分:-1)

不确定为什么要将tr标记放在循环中。 tr包装了所有td代码。

while($row = $result->fetch_object()) {
    echo '<tr>';
    ...
    foreach($data as $value) {
        echo '<td>', $value, '</td>';
    }
    echo '</tr>';
}

此外,您需要转义$_GET['id']

编辑:

每个元素都需要进入表格中的$row_count x $col_count块?我误解了这个问题。怎么样呢

while($row = $result->fetch_object()) {
    ...
    $i = 0;
    for ($r = 0; $r < $row_count; $r++) {
        echo '<tr>';
        for ($c = 0; $c < col_count; $c++,) {
            echo '<td>', $data[$i++], '</td>';
        }
        echo '</tr>';
    }
}

答案 2 :(得分:-1)

你是说这个吗?

$id = $_GET['id'];
$sql = "SELECT * FROM $table WHERE id = {$id}";
$result = $db->query($sql);

if($result->num_rows) {
    while($row = $result->fetch_object()) {
        $row_count = $row->rows;
        $col_count = $row->cols;
        $fields = $row->fields;
        $data = json_decode($fields);

        echo "<tr>";
        foreach($data as $value) {
           echo '<td>' . $value . '</td>';
        }
        echo "</tr>";
   }
   $result->free();
}