我已经解决了一个相对(几乎)微不足道的问题。我有一行数据要以表格形式(HTML)显示。出于某种原因(可能在计算机后面很长一天),我没有提出任何优雅的解决方案(算法)来做到这一点。
我已经提供了一些示例数据,以及这些数据将如何显示在表格中。我很感激有关algos的一些想法来实现这一点。
输出表的行标有各种分数,索引显示在底部。
我希望能够有一个变量来确定要在下面打印新表之前要打印的列数 - 以防止可疑的长表。
所以我想写一个带有以下签名的函数(忽略数据类型):
function create_table_html_from_rows(datarows,max_cols_per_table)
以下是示例数据和模拟输出表格演示文稿
Row data:
index, Score, amount
1, level 1, 12.24
3, level 4, 14.61
9, level 10, 42.35
15, level 2, -8.12
Scores
======
Level 1 12.24
Level 2 -8.12
Level 3
Level 4 14.61
.....
Level 10 42.35
----------------------------------------
| 1 | 3 | 9 | 15 <- Index
伪代码应该足够了,但是,如果你的代码片段是编程语言,那么值得注意的是我将用Python实现我的算法,但是以下任何语言的任何片段都可以:
Python,C,C ++,PHP,C#
答案 0 :(得分:1)
我假设您存储的Raw数据与我下面的数据类似。 此外,该级别是非唯一的。
<?
$rowData = array(
0=> array('index'=>1, 'Score'=>"level 1", 'amount'=>12.24),
1=> array('index'=>3, 'Score'=>"level 4", 'amount'=>14.61),
2=> array('index'=>9, 'Score'=>"level 10", 'amount'=>42.35),
3=> array('index'=>15, 'Score'=>"level 2", 'amount'=>-8.12),
4=> array('index'=>12, 'Score'=>"level 10", 'amount'=>16.5)
// example Raw Data with non-unique levels
);
$numOfScores = 15; // Predefined Score Level Max
foreach($rowData as $c){
$cols[] = $c['index']; //Create index row
$score = str_replace("level ","",$c['Score']); // split the score so it is only numeric
$levels[$score][] = $c; //create a 2-D array based on the level
}
echo "<table><tr><th colspan=".(sizeof($cols)+1).">Scores:</th></tr>";
for($ii = 1; $ii < $numOfScores; $ii++){ // Go through the levels
echo "<tr><td>Level ".$ii."</td>";
for($i = 0; $i < sizeof($cols); $i++){
echo "<td>";
if(isset($levels[$ii])){ // If I have a level, let's print it in the right column
foreach($levels[$ii] as $lvl)
if($cols[$i] == $lvl['index']) echo $lvl['amount'];
}
echo "</td>";
}
echo "<tr>";
}
echo "<td>Index:</td>";
foreach($cols as $c){
echo "<td>$c</td>";
}
echo "</table>";
?>
我得到以下输出:
Scores:
Level 1 12.24
Level 2 -8.12
Level 3
Level 4 14.61
Level 5
Level 6
Level 7
Level 8
Level 9
Level 10 42.35 16.5
Level 11
Level 12
Level 13
Level 14
Index: 1 3 9 15 12
我的屏幕上有正确的标签,可能看起来不是。
如您所见,我在数据中添加了一行以模拟非唯一行。应该工作!
答案 1 :(得分:0)
明天是新的一天。这个问题真是微不足道。也不会有优雅的解决方案,只需很长一段时间。
你也可以写出解决方案(不考虑其优点或其他方面),只是为了完成你的工作。之后,您将了解您的思维陷入困境以及如何编写更好的解决方案。
答案 2 :(得分:0)
我会按照以下方式执行此操作(注意:代码未经过测试/调试!):
<?php
$lines = file ("data.txt");
foreach ($lines as $line) {
$array = explode(",", $line);
$level = $array[1];
$index = $array[0];
$amount = $array[2];
$result[level][index] = $amount;
$indeces[] = $index;
}
echo "Scores<br>\n======<br>\n"
echo "<table>";
foreach ($result as $level => $row) {
echo "<tr>\n<td>$level\n";
foreach ($indeces as $index) {
echo "<td>";
if (!isset($row[$index])) {
echo " ";
} else {
echo $row[$index];
}
echo "\n";
}
}
echo "<tr>\n<td>\n";
foreach ($indeces as $index) {
echo "<td>$index\n";
?>