[英]How to arrange data fetched from mysql as per columns in html table?
我有来自 mysql 的数据以这种格式出现(期限上升到 9,当然在一个期限中可能更多。评估的列可能有一个空值或单个值):
学期 | 课程 | 评估 |
---|---|---|
1 | 科学100 | |
1 | STEM-200 | 公元前 |
2 | ASP-400 | AB |
3 | LEV-100 | 光盘 |
3 | WEL-200 | AB |
我想使用 PHP 以下表格式显示此表:
学期 | 1 | 2 | 3 |
---|---|---|---|
课程 | 科学100 | ASP-400 (AB) | LEV-100 (CD) |
STEM-200(公元前) | WEL-200 (AB) | ||
我正在使用以下 PHP 脚本来获得理想的结果,但它所做的只是将所有内容放在一列中:
在这里,学期是学期的数组,课程是课程的数组,水平是评估的数组。
$j=1;
for ($i = 0; $i < $size; $i++){
if($semester[$i] == $semester[$j]){
echo $semester[$i];
echo $semester[$j];
echo '<td>'.$courses[$i]." ".$level[$i].'</td></tr>';
}
else
{
echo'<tr>';
echo'<td>'.$courses[$i]." ".$level[$i].'</td>';
echo'</tr>';
}
$j++;
}
您可以使用这样的东西将水平表变成垂直表:
PHP:
<?php
function create(string $prefix, string $suffix, array $array){
$content = '';
foreach($array as $value){
$content .= $prefix . $value . $suffix;
}
return $content;
}
$result= $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
HTML:
<table>
<tbody>
<tr>
<?php echo create('<th>', '</th>', array_column($result, 'columnname1')) ?>
<?php echo create('<td>', '</td>', array_column($result, 'columnname2')) ?>
</tr>
</tbody>
</table>
一种简单的方法是首先按二维数组中的术语对课程进行分组:第一维是术语,第二维表示每个术语的课程
$groupedByTerm = [];
foreach ($courses as $course) {
if (! isset($groupedByTerm[$course['term']])) {
$groupedByTerm[$course['term']] = [];
}
$groupedByTerm[$course['term']][] = $course['course'];
}
为简单起见,我假设您的数据库中的数据作为关联数组返回 arrays,其中键term
为学期编号, course
为课程名称。
为了构建表格,您将循环直到所有术语都为空,这可以通过 do-while 完成,当每个术语的所有 arrays 为空时将完成:
$row = 0;
$row = 0;
do {
$hasData = false;
echo '<tr>';
if ($row == 0) {
echo '<td>Course</td>';
} else {
echo '<td></td>';
}
foreach ($groupedByTerm as $term) {
echo '<td>';
if (is_array($term) && isset($term[$row])) {
$hasData = true;
echo $term[$row];
}
echo '</td>';
}
echo '</tr>';
$row++;
} while($hasData);
上面的实现将呈现表格的主体。 我只是使用 echo 语句,但您可以将字符串累积在一个变量中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.