php中的动态标题和表格单元格

php中的动态标题和表格单元格,php,Php,我做二元表有问题 我的表格结构如下: ====================================================================== tender_id | coc | datasheet | datecode | shelflife | Suppliername ====================================================================== 201 | No | Yes

我做二元表有问题

我的表格结构如下:

======================================================================
tender_id | coc | datasheet | datecode | shelflife | Suppliername
======================================================================
   201    |  No |   Yes      |     Yes  |     No   |  Supplier1
   201    | Yes |   No       |     Yes  |     No   |  Supplier2
   201    | No  |   No       |     No   |     No   |  Supplier3
我对PHP的预期结果是

=============================================
 COC | Datasheet | Date Code | Supplier Name
=============================================
   -     Yes          Yes       Supplier1
  Yes    -            Yes       Supplier2
仅当值为“是”时,结果才会显示。如果所有值均为“否”,则即使标题也不应显示。例如,在上述条件下,所有供应商的shelflife值均为“否”。在这种情况下,即使标题也不应显示。我试过一些脚本,但有一些问题

这是我尝试过的脚本:

$sql_shelf = "SELECT tender_id, suppliername, coc, date_code, shelf_life , datasheet FROM comparitive_statement1 WHERE (coc='Yes' OR technical_compliance='Yes' OR date_code='Yes' OR shelf_life='Yes' OR datasheet='Yes') tender_id='$tender_id' group by suppliername";

    $result = mysql_query($sql_shelf) or die($sql_shelf."<br/><br/>".mysql_error());
    $i = 0;
    while ($list = mysql_fetch_array($result)) {
    if($i == 0){
    echo '<tr>';
    $sh = $list['shelf_life'];
    if ($sh=="No") {
    } else {
    echo '<td><b>Shelf Life</b></td>';
    }
      echo '</tr>';
      $i++;
      }

    echo '<tr>';
    $sl1 = $list['shelf_life'];
    if ($sl1=="No") {
    } else {
    echo "<td>{$list['shelf_life']}</td>";\
    echo "</tr>";
    }
     ++$i;
     }
$sql\u shelf=“从比较声明1中选择投标编号、供应商名称、coc、日期、保质期、数据表,其中(coc='Yes'或技术合规性='Yes'或日期\u code='Yes'或保质期='Yes'或数据表='Yes')投标编号='tender\u id'按供应商名称分组”;
$result=mysql\u query($sql\u shelf)或die($sql\u shelf。“

”。mysql\u error()); $i=0; 而($list=mysql\u fetch\u数组($result)){ 如果($i==0){ 回声'; $sh=$list[“保质期”]; 如果($sh==“否”){ }否则{ echo“保质期”; } 回声'; $i++; } 回声'; $sl1=$list[‘保质期’]; 如果($sl1==“否”){ }否则{ echo“{$list['shelf_life']}”\ 回声“; } ++$i; }

脚本有点长,所以我刚刚放置了与shelflife相关的记录。

为了确定是否应该显示整个列,您需要首先遍历所有记录。我尚未调试以下内容,但希望如果它不起作用,就足以让您了解需要做什么:

$result = mysql_query($sql_shelf) or die($sql_shelf."<br/><br/>".mysql_error());
$stuff = array(); //an array for all of the rows
$columns = array(); //an array for the columns
while ($list = mysql_fetch_array($result,MYSQL_ASSOC)) {
    $stuff[] = $list; //add list to the appropriate array
    if(empty($columns)) { foreach($list as $key=>$val) { $columns[$key] = 0; } } //fill $columns with a dynamic number of 0s based on how many columns the database returns
    foreach($list as $key=>$val) { if(!is_numeric($val) && $val!= 'No') { $columns[$key] = 1; } } //sets column array value to 1 for any non-numeric/non-no answer
}
//now we actually build the table
echo "<table><thead>";
echo "<tr>";
foreach($columns as $name=>$display){
    if($display== 1) { echo "<th>".$name."</th>"; } //if we set the value earlier to 1, then we want the column to show
}
echo "</tr></thead><tbody>";
foreach($stuff as $list){
    echo "<tr>";
        foreach($list as $key=>$val){
            if($columns[$key] == 1){ echo "<td>".$val."</td>";
        }
    echo "</tr>";
}
echo "</tbody></table>";
$result=mysql\u query($sql\u shelf)或die($sql\u shelf。“

”。mysql\u error(); $stuff=array()//所有行的数组 $columns=array()//列的数组 而($list=mysql\u fetch\u数组($result,mysql\u ASSOC)){ $stuff[]=$list;//将列表添加到适当的数组中 if(empty($columns)){foreach($list as$key=>$val){$columns[$key]=0;}}}//根据数据库返回的列数,用动态的0填充$columns foreach($key=>$val){if(!is_numeric($val)&&$val!='No'){$columns[$key]=1;}}}}//将任何非数字/非无答案的列数组值设置为1 } //现在我们实际构建表 回声“; 回声“; foreach($name=>$display形式的列){ 如果($display==1){echo'.$name.“;}//如果我们将前面的值设置为1,那么我们希望显示该列 } 回声“; foreach($stuff作为$list){ 回声“; foreach($key=>$val){ 如果($columns[$key]==1){echo.“$val.”; } 回声“; } 回声“;

编辑:添加表标记

为了确定是否应显示整个列,您需要首先遍历所有记录。我尚未调试以下内容,但希望如果它不起作用,它足以让您了解需要做什么:

$result = mysql_query($sql_shelf) or die($sql_shelf."<br/><br/>".mysql_error());
$stuff = array(); //an array for all of the rows
$columns = array(); //an array for the columns
while ($list = mysql_fetch_array($result,MYSQL_ASSOC)) {
    $stuff[] = $list; //add list to the appropriate array
    if(empty($columns)) { foreach($list as $key=>$val) { $columns[$key] = 0; } } //fill $columns with a dynamic number of 0s based on how many columns the database returns
    foreach($list as $key=>$val) { if(!is_numeric($val) && $val!= 'No') { $columns[$key] = 1; } } //sets column array value to 1 for any non-numeric/non-no answer
}
//now we actually build the table
echo "<table><thead>";
echo "<tr>";
foreach($columns as $name=>$display){
    if($display== 1) { echo "<th>".$name."</th>"; } //if we set the value earlier to 1, then we want the column to show
}
echo "</tr></thead><tbody>";
foreach($stuff as $list){
    echo "<tr>";
        foreach($list as $key=>$val){
            if($columns[$key] == 1){ echo "<td>".$val."</td>";
        }
    echo "</tr>";
}
echo "</tbody></table>";
$result=mysql\u query($sql\u shelf)或die($sql\u shelf。“

”。mysql\u error(); $stuff=array();//所有行的数组 $columns=array();//列的数组 而($list=mysql\u fetch\u数组($result,mysql\u ASSOC)){ $stuff[]=$list;//将列表添加到适当的数组中 if(empty($columns)){foreach($list as$key=>$val){$columns[$key]=0;}}}//根据数据库返回的列数,用动态的0填充$columns foreach($key=>$val){if(!is_numeric($val)&&$val!='No'){$columns[$key]=1;}}}}//将任何非数字/非无答案的列数组值设置为1 } //现在我们实际构建表 回声“; 回声“; foreach($name=>$display形式的列){ 如果($display==1){echo'.$name.“;}//如果我们将前面的值设置为1,那么我们希望显示该列 } 回声“; foreach($stuff作为$list){ 回声“; foreach($key=>$val){ 如果($columns[$key]==1){echo.“$val.”; } 回声“; } 回声“;

编辑:添加了表标记

请同时添加您已经编写的SQL语句。它是否存储在
$SQL\u shelf
中?如果您想隐藏完整的列,包括标题,那么您需要将返回的行保存在php数组中,然后过滤该数组,或者使用javascript检查列并过滤/隐藏。为什么支持er3不是输出的一部分?请尝试使用适当的if()语句编写。您可以编写if($sl1!=“否”)如果您的布尔值存储在$sl1变量中。@mapek。我已经用sql查询编辑了这个问题。是的,它存储在$sql\u shelf中。请同时添加您已经编写的sql语句。它是否存储在
$sql\u shelf
中?如果您想隐藏完整的列,包括标题,那么您需要将返回的行保存在一个php数组,然后过滤该数组或使用javascript检查列并过滤/隐藏。为什么Supplier3不是您的输出的一部分?尝试使用适当的if()语句编写。您可以编写if($sl1!=“No”)如果您有存储在$sl1变量中的布尔值。@mapek。我已经用sql查询编辑了这个问题。是的,它存储在$sql\u shelf中。完整的表没有方向。但是我可以查看记录。您能告诉我从哪里开始,从哪里结束吗?我可以放我自己的标题吗?为了使用您自己的标题,您要走了需要类似的数组:$columnnames['Suppliername']='Suppliername';然后将echo“$Name.”修改为echo“$columnnames[$Name]”;整张表无法定向。但我可以查看记录。您能告诉我从何处开始以及从何处结束吗?我还可以设置自己的标题吗?为了使用自己的标题,您需要一个类似于:$columnnames['Suppliername']='Suppliername';然后修改echo.“$Name.”“to be echo”的数组.$columnnames[$name]。“”;