ID       Name              Type     ParentID
2 生活作息是否规律 0 1
3 是          1 2
4 否          1 2
5 不一定          1 2
6 生活作息时间 0 1
7 早起          0 6
8 晚起          0 6
9 饮食是否规律 0 1
10 是          0 9
11 否          0 9
我数据里面PARENTID为1是问题,其他的是选项,我想把问卷组合起来。
$row = $SqlDB->Query($sql);
$arr = $SqlDB->getRows($row);$str = "";
$str1 = "";
for($i=0; $i<count($arr); $i++){
if( $arr[$i]['parentid'] == "1" ){
$str .="<tr><td colspan=\"3\" bgcolor=\"#990000\">".$arr[$i]['question']."</td></tr>";
$str1 = "<tr>";
if($arrRowService[$i]['parentid'] == $arr[$i]['id']){
$str1 .="<td colspan=\"3\" bgcolor=\"#990000\">".$arr[$i]['question']."</td>";
}
$str11 .= "</tr>";
}         
echo $str.$str1;
不知道为什么只列出来了问题,选项没关联出来???

解决方案 »

  1.   

    首先,我不知道$arrRowService这个变量储存的内容,但是根据上下文,我姑且猜测为和$arr的内容是一直的。
    之所以不出来,是很正常的。因为少了个循环。
    应该改成这样。
    $str   =   " "; 
    $str1   =   " "; 
    for($i=0;   $i <count($arr);   $i++){ 
      if(   $arr[$i][ 'parentid ']   ==   "1 "   ){ 
        $str   .= " <tr> <td   colspan=\ "3\ "   bgcolor=\ "#990000\ "> ".$arr[$i][ 'question ']. " </td> </tr> "; 
      $str1   =   " <tr> "; 
      for($a=0;$a<count($arrRowService);$a++){
        if($arrRowService[$a][ 'parentid ']   ==   $arr[$i][ 'id ']){ 
          $str1   .= " <td   colspan=\ "3\ "   bgcolor=\ "#990000\ "> ".$arr[$i][ 'question ']. " </td> "; 
        }
      } 
    $str11   .=   " </tr> "; 
    }                   
    echo   $str.$str1; 还有,虽然不能打tab,但是你打个空格行不行?看着我真的很累....囧。
      

  2.   

    <?php
    require("config.inc.php"); $sqlService = "select a.name as question,b.parentid as parentid,a.healthrecordtplid as id from gst_HealthRecordTpl as a INNER JOIN gst_HealthRecordTpl as b ON a.Parentid =b.healthrecordtplid inner join  gst_HealthRecordTpl as c on c.parentid=0";

    $rowService = $SqlDB->Query($sqlService);
    $arr = $SqlDB->getRows($rowService); $str1 = "";
    $str = "<TABLE width=\"95%\" align=\"center\" border=\"1\">";
    for($i=0; $i <count($arr); $i++){
    if( $arr[$i]['parentid'] == "1" ){  
    $str .= " <tr><td>".$arr[$i]['question']."</td></tr> ";  
    $str1 = " <tr> ";  
    for($a=0;$a<count($arr);$a++){
    if($arr[$a]['parentid'] == $arr[$i]['id']){
    $str1 .= " <td>".$arr[$i]['question']. "</td> ";  
    }
    }  
    $str1 .= " </tr> ";  
    }
    }
    $str .="</table>";
    echo $str.$str1;
    ?>楼上的兄弟,谢谢你,但是还有个问题第二个循环里面问题选项能显示出来,第一个循环里面的问题为什么没有出来呢。
      

  3.   

    <?php
    require("config.inc.php"); $sqlService = "select a.name as question,a.parentid as parentid,a.healthrecordtplid as hid from gst_HealthRecordTpl as a INNER JOIN
          gst_HealthRecordTpl as b ON a.Parentid =b.healthrecordtplid";

    $rowService = $SqlDB->Query($sqlService);
    $arr = $SqlDB->getRows($rowService); $str1 = "";
    $str .= "<table width=\"95%\" align=\"center\" border=\"1\">";
    //print_r($arr);
    for($i=0; $i<count($arr); $i++){
    //echo $arr[$k]['parentid']."<br>";
    if( $arr[$i]['parentid'] == "1" ){  
    $str .= "<tr><td>".$arr[$i]['question']."</td></tr>"; 
    $str1 .= "<tr>";  
    for($a=0; $a<count($arr); $a++){
    //echo $arr[$a]['parentid']."<br>";
    if($arr[$a]['parentid'] == $arr[$i]['hid']){
    $str1 .= "<td>".$arr[$a]['question']. "</td>";
    }
    }  
    $str1 .= "</tr>";
    }
    }
    $str .="</table>";
    echo $str.$str1;
    ?>
    楼上的兄弟我这显示的结果成了下面的
    <table width="95%" align="center" border="1"><tr><td>生活作息是否规律</td></tr><tr><td>生活作息时间</td></tr><tr><td>饮食是否规律</td></tr><tr><td>饮食喜好</td></tr></table><tr><td>是</td><td>否</td><td>不一定</td></tr><tr><td>早起</td><td>晚起</td></tr><tr><td>是</td><td>否</td></tr><tr><td>牛肉</td><td>猪肉</td><td>羊肉</td><td>鱼肉</td><td>海鲜</td><td>蔬菜</td><td>水果</td><td>煎</td><td>炸</td><td>蒸</td><td>煮</td><td>炖</td><td>烤</td><td>火锅</td><td>药膳</td><td>冷饮</td><td>烫食</td></tr>我是想实现生活作息是否规律(问题)这个TR结束后跟着><tr><td>是</td><td>否</td><td>不一定</td></tr>问题这个tr
      

  4.   

    我明白问题在哪了。问题还有一方面在你的字符串上。
    你把$str1的地方都换成$str试试。
      

  5.   

    $str11   .=   " </tr> "; 这个变量多了一个1应该为:$str1   .=   " </tr> "; 
      

  6.   

    今天上午无聊,自己敲了一下。首先我建了个表,按照你给出的字段名称和内容。
    然后我自己用了一个现成的数据库类,先贴代码,然后你哪不明白的再问我,这个我自己敲过了,绝对没有问题。
    <?phprequire_once('config.php');require_once('cls_mysql.php');$db =new cls_mysql($read_db_host, $read_db_user, $read_db_pass, $read_db_name, 'UTF8');$sql = "select * from gst_healthrecordtpl";
    $row = $db->getAll($sql);$str = "";
    $str .="<table width=\"95%\" align=\"center\" border=\"1\">";
    for($i=0;$i<count($row);$i++){
    if($row[$i]['ParentID'] == '1'){
    $str .= "<tr><td colspan=\"3\" bgcolor=\"#990000\">".$row[$i]['name']."</td></tr>";
    }
    $str .= "<tr>";
    for($a=0;$a<count($row);$a++){
    if($row[$a]['ParentID'] == $row[$i]['Id']){
    $str .= "<td>".$row[$a]['name']."</td>";
    }
    }
    $str .= "</tr>";
    }
    echo $str;
    ?>
    config.php里面是配置的数据库链接参数。cls_mysql类是个现成的数据库类。查询语句我没写你那么复杂的内链接,因为你给我的表就4个字段,而且基本都用上了,所以我就直接select *了,其实我觉得你应该把type用上来判断数据是问题还是答案,而不应该通过父类ID,这样会出现问题的。$row出来的结果是个二维数组,你懂的...
      

  7.   

    问题出在遍历操作上,代码改为:
    <?phprequire_once('config.php');require_once('cls_mysql.php');$db =new cls_mysql($read_db_host, $read_db_user, $read_db_pass, $read_db_name, 'UTF8');$sql = "select * from gst_healthrecordtpl";
    $row = $db->getAll($sql);
    $row1=$row;//复制一份用于循环,因为数组遍历时指针会发生移动$str = "";
    $str .="<table width=\"95%\" align=\"center\" border=\"1\">";
    foreach($row as $key=>$value){
        if($row[$key]['ParentID'] == '1'){
            $str .= "<tr><td colspan=\"3\" bgcolor=\"#990000\">".$row[$key]['name']."</td></tr>";
        }
        $str .= "<tr>";
        foreach($row1 as $key=>$value){
            if($row1[$key]['ParentID'] == $row[$key]['Id']){
                $str .= "<td>".$row1[$key]['name']."</td>";
            }
        }
        $str .= "</tr>";
    }
    echo $str;
    ?>
    注意 $row = $db->getAll($sql);得到的一定要是数组