php - 从数组打印 Html 表格
问题描述
我有一个这种格式的csv。我正在尝试构建一个如下所示的 html 表。
Sem 1 , Subj 1 , 75 , 100 ;
Sem 1 , Subj 2 , 95 , 100 ;
Sem 1 , Subj 3 , 88 , 100 ;
Sem 2 , Subj 2 , 95 , 100 ;
Sem 2 , Subj 3 , 85 , 100 ;
Sem 3 , Subj 4 , 87 , 100 ;
Sem 4 , Subj 1 , 84 , 100 ;
HTML 表格
Sem 1 Sem 2 Sem 3 Sem 4
Subj 1 75 X X 84
Subj 2 95 95 X X
Subj 3 88 85 X X
Subj 4 X X 87 X
// 这就是我想出的。当前仅打印标题
$datas = [
["Sem 1" , "Subj 1" , "75" , "100"],
["Sem 1" , "Subj 2" , "95" , "100"],
["Sem 1" , "Subj 3" , "88" , "100"],
["Sem 2" , "Subj 2" , "95" , "100"],
["Sem 2" , "Subj 3" , "85" , "100"],
["Sem 3" , "Subj 4" , "87" , "100"],
["Sem 4" , "Subj 1" , "84" , "100"]];
$unique_coloum = [];
echo "<tr>";
foreach($datas as $data){
if(!in_array($data[0],$unique_coloum)){
echo "<td>".$data[0]."</td>";
array_push($unique_coloum,$data[0]);
}
}
echo "</tr>";
foreach($datas as $data){
#?
}
Sem 和 Subj 是 n。我被困在关于如何开始的 for 循环逻辑上。任何帮助都会很棒。
解决方案
您可以使用下一个解决方案:
<?php
$datas = [
["Sem 1" , "Subj 1" , "75" , "100"],
["Sem 1" , "Subj 2" , "95" , "100"],
["Sem 1" , "Subj 3" , "88" , "100"],
["Sem 2" , "Subj 2" , "95" , "100"],
["Sem 2" , "Subj 3" , "85" , "100"],
["Sem 3" , "Subj 4" , "87" , "100"],
["Sem 4" , "Subj 1" , "84" , "100"]
];
$columns = array_column($datas, 0, 0);
sort($columns);
// var_export($columns);
$res = array_reduce(
$datas,
function($res, $data) {
if (!isset($res[$data[1]])) $res[$data[1]] = [];
$res[$data[1]][$data[0]] = $data[2];
return $res;
},
$res
);
// var_export($res);
$output = "<tr><th>subject</th>" . implode('</th><th>', $columns) . '</th></tr>' . PHP_EOL;
foreach($res as $key => $row) {
$output .= "<tr><td>$key</td>";
foreach($columns as $col) {
$output .= $row[$col] ? "<td>$row[$col]</td>" : "<td>X</td>";
}
$output .= "</tr>" . PHP_EOL;
}
echo $output;
推荐阅读
- android - RecyclerView 选择与对话框一起导致崩溃。空对象上的 getAdapterPostion()
- javascript - 如何使用 Google Closure Compiler 减小 Angularjs 站点的大小?
- python - 如何在python中改变颜色(windows)
- ios - 辞职 ipa 或 xcarchive
- junit - InvalidUseOfMatchers 即使没有参数和匹配器是正确的
- c# - 当我单击 LinkButton 时,它不会调用函数“LinkButton_Click”
- javascript - 中心聚焦滑块
- python - 检查元组是否包含列表的任何元素,python
- azure - 使用自定义 order by 子句的 Cosmos DB 分页查询
- powershell - 从竹子运行的 PowerShell 脚本,给出错误您不能在空值表达式上调用方法