2012-01-10 5 views
1

私はIDと名前で構成されるデータベースからレコードを持っています。すべてのレコードが1-2-1-2-4のように分散されているcolspanに出力します。次のようにhttp://imageshack.us/photo/my-images/42/wrongb.png/を与える私のプログラムリストは次のとおりです。colspanのphp表示レコード

<table border="1" cellspacing="0" cellpadding="0" width="200"> 
$itemCount = 0; 
$itemIndex = 0; 
$colSpan = 0; 
$itemColCount = 0; 
while ($itemCount < $total) { // $row = mysql_fetch_array($result) 
$row = mysql_fetch_array($result) 
<tr> 
if ($itemIndex == 0 || $itemIndex == 2) 
{ 
     $colSpan=4; 
     $itemColCount = 1; 
     $itemIndex++; 
    } 
    else if ($itemIndex == 1 || $itemIndex == 3) { 
     $colSpan=2; 
     $itemColCount = 2; 
     $itemIndex++; 
    } 
    else { 
     $colSpan=0; 
     $itemColCount = 4; 
     $itemIndex = 0; 
    } 
    while ($itemColCount > 0) 
    { 
     if ($colSpan > 0) 
     { 
      print "<td colspan=\"$colSpan\">$itemCount".$row['name']."</td>"; // $row['itemName'] 

     } 
     else 
     { 
      print "<td>item$itemCount".$row['name']."</td>"; // $row['itemName'] 
     } 
     $itemCount++; 
     $itemColCount--; 
    } 
    $itemColCount = 0; 
    $colSpan = 0; 
    print "\n"; 
</tr> 
} 
</table> 

私が所望のプログラムの出力を達成するためにどのように助けを必要とします。これを達成するために必要なものはhttp://img828.imageshack.us/img828/4411/correctj.pngです。

+0

申し訳ありませんが、私は間違った正しい画像に大きな違いはありません。あなたはとても親切で、正確に何を達成したいのか説明してください。 – Ranty

答えて

0

テーブルには非常に特殊なレイアウトがあるようですので、条件付きチェックを使用して印刷するものを動的に決定するのではなく、定義済みのテンプレートにデータをドロップすることをお勧めします。副作用として、読みやすく、扱いやすくなります。

まず、行データを一時的に配列に保存し、mysql resultsetが動作する線形方法ではなく、一度にすべてのデータにアクセスできるようにする必要があります。このアプローチは、結果セットのサイズが変更された場合でも元のソリューションと同じように変更されます。

while($row = mysql_fetch_array($result)) { 
$data[] = $row; 
} 

print 
'<table border="1" cellspacing="0" cellpadding="0" width="200"> 
    <tr><td colspan="4">'.$data[0]['name'].'</td></tr> 
<tr><td colspan="2">'.$data[1]['name'].'</td> 
    <td colspan="2">'.$data[2]['name'].'</td></tr> 
<tr><td colspan="4">'.$data[3]['name'].'</td></tr> 
<tr><td colspan="2">'.$data[4]['name'].'</td> 
    <td colspan="4">'.$data[5]['name'].'</td></tr> 
<tr><td>'.$data[6]['name'].'</td> 
    <td>'.$data[7]['name'].'</td> 
    <td>'.$data[8]['name'].'</td> 
    <td>'.$data[9]['name'].'</td></tr> 

';

可能であれば、データベースから1行のデータを戻す方が良いでしょう。これにより、10行の1つの列ではなく、1つの行の列にアクセスできます。次に、HTMLを生成するために条件文に頼っている状況にはなりません。 DBエンドの作成者でもあれば、これを考慮する必要があります。 DBがあなたのコントロール下にない場合、あなたはできるだけでなくそれに対処する必要があります。