如何将array_column()和array_filter()集成到sql结果的动态表生成中

时间:2017-01-26 21:02:16

标签: php mysql dynamic html-table

我想从sql-database读出数据并在表格中显示它们。这很好用。现在,我想只显示那些至少有一个值的列,而不是空的列(包含NULL,0,空字符串)。这适用于以下示例:

enter code here

    <TABLE width="500" border="1" cellpadding="1" cellspacing="1">

    <?php
    $query = mysql_query("SELECT * FROM guestbook", $db);

    $results = array();

    while($line = mysql_fetch_assoc($query)){
    $results[] = $line;
    $Name = array_column($results, 'Name');
    $Home = array_column($results, 'Home');
    $Date = array_column($results, 'Date');
    $Emptycolumn = array_column($results, 'Emptycolumn');
    $Comment = array_column($results, 'Comment');
    $City = array_column($results, 'City');
    }

    echo "<TR>";
    if(array_filter($Name)) {echo "<TH>Name</TH>";}
    if(array_filter($Home)){echo "<TH>Home</TH>";}
    if(array_filter($Date)){echo "<TH>Date</TH>";}
    if(array_filter($Emptycolumn)){echo "<TH>Emptycolumn</TH>";}
    if(array_filter($Comment)){echo "<TH>Comment</TH>";}
    if(array_filter($City)){echo "<TH>City</TH>";}

    echo "</TR>";

    $query = mysql_query("SELECT * FROM guestbook", $db);

    while($line = mysql_fetch_assoc($query)){

    echo "<TR>";

  if(array_filter($Name)) {echo "<TD>".$line['Name']."</TD>";}
  if(array_filter($Home)) {echo "<TD>".$line['Home']."</TD>";}
  if(array_filter($Date)) {echo "<TD>".$line['Date']."</TD>";}
  if(array_filter($Emptycolumn)) {echo "<TD>".$line['Emptycolumn']."</TD>";}
  if(array_filter($Comment)) {echo "<TD>".$line['Comment']."</TD>";}
  if(array_filter($City)) {echo "<TD>".$line['City']."</TD>";}

  echo "</TR>";
  }

  ?>

  </TABLE>

由于我的表的列名是高度可变的(取决于查询),因此通过循环遍历结果数组,首先是列名,然后是行中的值来生成表:

enter code here

 $sql = "SELECT DISTINCT $selection FROM $tabelle WHERE  
 $whereclause"; //will be changed to PDO


 $result = mysqli_query($db, $sql) or die("<b>No result</b>"); //Running 
     the query and storing it in result
 $numrows = mysqli_num_rows($result);  // gets number of rows in result 
     table
 $numcols = mysqli_num_fields($result);   // gets number of columns in 
     result table
 $field = mysqli_fetch_fields($result); // gets the column names from the 
     result table

 if ($numrows > 0) {

 echo "<table id='myTable' >";

 echo "<thead>";
 echo "<tr>";
 echo "<th>" . 'Nr' . "</th>";

 for($x=0;$x<$numcols;$x++){
         $key = array_search($field[$x]->name, $custom_column_arr);
         if($key !== false){
             echo "<th>" . $key . "</th>";
         }else{
             echo "<th>" . $field[$x]->name . "</th>";
         }
     }

 echo "</tr></thead>";

 echo "<tbody>";

 $nr = 1;

 while ($row = mysqli_fetch_array($result)) {
 echo "<tr>";
 echo "<td>" . $nr . "</td>";
   for ($k=0; $k<$numcols; $k++) {    //  goes around until there are no 
   columns left
         echo "<td>" . $row[$field[$k]->name] . "</td>"; //Prints the data
   }
 echo "</tr>";
 $nr = $nr + 1;


 }     // End of while-loop

 echo "</tbody></table>";
 }
 }

 mysqli_close($db);

现在,我尝试将上面示例中的array_column()和array_filter()块集成到循环中,但不幸的是,它无法正常工作。我确定,对于专业人士来说这很容易,如果有人能帮我解决这个问题,我将非常感激! 非常感谢你提前!!

0 个答案:

没有答案