2016-11-22 126 views
0

请求帮助程序员比我更有经验,因为这个问题困扰着我数星期。根据数据显示的动态列中的表格

<table class="table-bordered table hover table-striped" id="grades_degree"> 
 
    <tr> 
 
    <td >COURSES TAKEN</td> 
 
    <td rel='a'>FALL 2013</td> 
 
    <td rel='b'>WINTER 2014</td> 
 
    <td rel='c'>SPRING 2014</td> 
 
    <td rel='d'>SUMMER 2014</td> 
 
    <td rel='e'>FALL 2014</td> 
 
    <td rel='f'>WINTER 2015</td> 
 
    <td rel='g'>SPRING 2015</td> 
 
    <td rel='h'>SUMMER 2015</td> 
 
    <td rel='i'>FALL 2015</td> 
 
    <td rel='j'>WINTER 2016</td> 
 
    <td rel='k'>SPRING 2016</td> 
 
    <td rel='l'>FALL 2016</td> 
 
    <td rel='m'>GREEN 2014</td> 
 
    <td rel='n'>ORANGE 2015</td> 
 
    <td rel='o'>RED 2015</td> 
 
    <td rel='p'>YELLOW 2015</td> 
 
    <td rel='q'>BLUE 2015</td> 
 
    <td rel='r'>GREEN 2015</td> 
 
    <td rel='s'>ORANGE 2016</td> 
 
    <td rel='t'>RED 2016</td> 
 
    <td rel='u'>WHITE 2016</td> 
 
    <td>GPA</td> 
 
    <td>CREDITS</td> 
 
    
 
</tr> 
 

 
    
 
<?php  
 
$sql = "SELECT * FROM grades WHERE student_id=$id"; 
 
$result = mysqli_query($conn, $sql); 
 

 
if (mysqli_num_rows($result) > 0) { 
 
    // output data of each row 
 
    while($row = mysqli_fetch_assoc($result)) { 
 

 
echo "<tr>"; 
 
echo "<td>".$row["course"]."</td>"; 
 
echo "<td rel='a'>".$row["fall2013"] ."</td>"; 
 
echo "<td rel='b'>".$row["winter2014"] ."</td>"; 
 
echo "<td rel='c'>".$row["spring2014"] ."</td>"; 
 
echo "<td rel='d'>".$row["summer2014"] ."</td>"; 
 
echo "<td rel='e'>".$row["fall2014"] ."</td>"; 
 
echo "<td rel='f'>".$row["winter2015"] ."</td>"; 
 
echo "<td rel='g'>".$row["spring2015"] ."</td>"; 
 
echo "<td rel='h'>".$row["summer2015"] ."</td>"; 
 
echo "<td rel='i'>".$row["fall2015"] ."</td>"; 
 
echo "<td rel='j'>".$row["winter2016"] ."</td>"; 
 
echo "<td rel='k'>".$row["spring2016"] ."</td>"; 
 
echo "<td rel='l'>".$row["fall2016"] ."</td>"; 
 
echo "<td rel='m'>".$row["green2014"] ."</td>"; 
 
echo "<td rel='n'>".$row["orange2015"] ."</td>"; 
 
echo "<td rel='o'>".$row["red2015"] ."</td>"; 
 
echo "<td rel='p'>".$row["yellow2015"] ."</td>"; 
 
echo "<td rel='q'>".$row["blue2015"] ."</td>"; 
 
echo "<td rel='r'>".$row["green2015"] ."</td>"; 
 
echo "<td rel='s'>".$row["orange2015"] ."</td>"; 
 
echo "<td rel='t'>".$row["red2016"] ."</td>"; 
 
echo "<td rel='u'>".$row["white2016"] ."</td>"; 
 
echo "<td>".str_replace(',','.',$row["gpa"]) ."</td>"; 
 
echo "<td>".$row["credits"] ."</td>";  
 
echo "</tr>"; 
 
} 
 
} 
 
?> 
 
</table>

您可能已经想通了,我尝试什么样的影响。

如果“整列”(每个单元格)没有值(不包括第一行),我想要一个php代码,允许删除整个列[Only Seasons Label]。

注意事项: 如果任何高度的单元格包含值,则不能删除该列。实际上这个表格有一个矩阵结构,标签位于第一列和第一行。

开发人员的语言:php。我是初中/中级编码员。

+0

一个简单的方法可能是为列创建一个“可见性标志”数组。您可以遍历整个结果集来设置标志(将它们的默认值设置为false,然后在该列中找到值时将其设置为true),然后使用标志输出表格。虽然我正在努力想办法做到这一点,不涉及遍历整个表两次(一次设置标志,再次输出数据)。如果性能不是问题,那当然是一个简单的方法。 – David

+0

我更喜欢性能的结果,也是因为我需要生成pdf。感谢关注我的问题。 –

回答

0

因此,基本上你需要的是一个数组,以便在打印完所有行之后,如果某个列有值,那么该数组就会跟踪。

我只使用3列使代码更具可读性。

if (mysqli_num_rows($result) > 0) { 
    // output data of each row 
    while($row = mysqli_fetch_assoc($result)) { 
    echo "<tr>"; 
    echo "<td>".$row["course"]."</td>"; 
    echo "<td rel='a'>".$row["fall2013"] ."</td>"; 
    echo "<td rel='b'>".$row["winter2014"] ."</td>"; 
    echo "<td rel='c'>".$row["spring2014"] ."</td>"; 
    echo "<td>".str_replace(',','.',$row["gpa"]) ."</td>"; 
    echo "<td>".$row["credits"] ."</td>";  
    echo "</tr>"; 

    // the following lines check if the cell of a specific column has a value 
    if ($count['a']!= "") $count['a']++; // If it is not empty it adds 1 to the count of that column 
    if ($count['b']!= "") $count['b']++; 
    if ($count['c']!= "") $count['c']++; 
    } 
    foreach ($count as $rel => $total) { 
     if ($total == 0){ // if Total count equals zero, it means that the $rel column never had a value in any of the rows 
     echo "the column $rel has no values and should not appear" // for testing only 
     // you now have the identity of the column to hide --> $rel 
     // here you hide the column with jquery or javascript 
     } 
    } 
} 

if ($count['a']!= "") $count['a']++; 

相同

if ($count['a']!= "") { 
    $count['a']++;  
} 

,但节省了空间。

注意:如果单元格为空或NULL,但没有空格或其他任何东西,则此方法有效。

最后请注意:如果您分配一个ID或类到细胞中,这将简化躲在细胞与CSS和javascrit的过程

这种方法考虑到了性能,它只是循环的一次简单的数组整数来检查单元格是否应该隐藏。 删除未使用的列比删除所有数据的两个完整循环更容易,以查看哪些列不应从头开始打印。

+0

我很感谢你的反思。我会测试它。 –

+0

要隐藏列有很多方法可以做到这一点。在Stackoverflow的答案中查找以查看许多示例。 – docliving

0

<?php  
 
$sql = "SELECT * FROM grades WHERE student_id=$id"; 
 
$result = mysqli_query($conn, $sql); 
 

 
if (mysqli_num_rows($result) > 0) { 
 
    // output data of each row 
 
    while($row = mysqli_fetch_assoc($result)) { 
 

 
$results_grades[] = $row; \t 
 
} 
 

 
} 
 
echo "<table class='table-bordered table hover table-striped' id='grades_degree'>"; 
 
foreach($results_grades as $value) { 
 
echo "<tr>"; 
 
    foreach($value as $key => $val) { 
 
     if ($val!="") { 
 
    \t \t \t echo "<td>".$key."</td><td> ".$val."</td>"; 
 
\t \t \t \t } 
 
     } 
 
    echo "</tr>"; 
 
    } 
 
echo "</table>"; \t 
 
?>

反思我设法让,让我,一个非常肮脏的代码多维数组,甚至可以得到想要的效果的解决方案。 向前一小步。

相关问题