gpt4 book ai didi

php - 使用 rowspan 从 mysql 结果动态创建表

转载 作者:行者123 更新时间:2023-11-29 22:55:06 25 4
gpt4 key购买 nike

我以这种方式从 Mysql 输出创建一个 HTML 表:

$i = 0;
while ( $row = mysql_fetch_assoc($result) ) {
if ( $i == 0 ) {
echo "<tr>";
foreach ( array_keys($row) as $fieldName ) echo "<th>".$fieldName."</th>";
echo "</tr>";
}
echo "<tr>";
foreach ( $row as $value ) echo "<td>".$value."</td>";
echo "</tr>";
$i++;
}

如果一列中有两个或多个相同的单元格,则应使用 HTML 属性 rowspan 自动连接这些单元格

我无法找到动态创建在同一中包含连接单元格的表格的解决方案。

最佳答案

当您想要更改行跨度时,您必须做两件事:

  • 检查该列中的下一个值以了解有多少是相同的
  • 检查之前的行跨度值以避免打印以下值不应该(因为前一个的 rowspan > 1)

这里是一些带有示例值的代码,以便您可以对其进行测试。第一个 foreach() 必须替换为 while ($row = mysql_fetch_assoc($result)) { 以使其适用于数据库的数据。

// Example datas for tests
$rows = array(
0 => array(
'name' => 'Product 1',
'price' => 20,
'option_x_included' => 'No',
'duration' => 12
),
1 => array(
'name' => 'Product 2',
'price' => 30,
'option_x_included' => 'Yes',
'duration' => 12
),
2 => array(
'name' => 'Product 3',
'price' => 45,
'option_x_included' => 'Yes',
'duration' => 18
),
3 => array(
'name' => 'Product 4',
'price' => 60,
'option_x_included' => 'Yes',
'duration' => 24
)
);

echo '<table>';

$i = 0;
$rowspanValues = array();
foreach($rows as $index => $row) {
// Replace this foreach (for tests) by:
// while ($row = mysql_fetch_assoc($result)) {

// First row: Column headers
if ($i == 0) {
echo '<tr>';
foreach (array_keys($row) as $fieldName) {
echo '<th>'.$fieldName.'</th>';

// Init rowspan value for each column
$rowspanValues[$fieldName] = 1;
}
echo '</tr>';
}

// Other rows: Values
echo '<tr>';
foreach ($row as $fieldName => $value) {

if ($rowspanValues[$fieldName] == 1) {
// rowspan for that column is 1: means that we have not tested next values

// Test if next values in the same column is the same
$nextIndex = $index+1;
while (!empty($rows[$nextIndex][$fieldName]) && $value == $rows[$nextIndex][$fieldName]) {
// Increment nextIndex to test the row after
$nextIndex++;

// Increment current rowspan value
$rowspanValues[$fieldName]++;
}

// Put the calculated rowspan to current cell
echo '<td rowspan="'.$rowspanValues[$fieldName].'">'.$value.'</td>';
} else {
// rowspan value > 1: means that the previous column had a bigger rowspan, so this cell must not been printed
$rowspanValues[$fieldName]--;
}

}
echo '</tr>';
$i++;
}

echo '</table>';

关于php - 使用 rowspan 从 mysql 结果动态创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28744747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com