我舉例資料庫有四筆資料
name item
('jhon', 'jhon-1'),
('jhon', 'jhon-2'),
('allen', 'allen-1'),
('allen', 'allen-2');
我的程式寫法如下
<?php
$hostname_everyday = "localhost";
$database_everyday = "test";
$username_everyday = "root";
$password_everyday = "root";
$everyday = mysql_pconnect($hostname_everyday, $username_everyday, $password_everyday) or trigger_error(mysql_error(),E_USER_ERROR);
mysql_select_db($database_everyday, $everyday);
$sql = "
SELECT *
FROM abc
ORDER BY name, item
";
$Recordset1 = mysql_query($sql, $everyday) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<table border="2">
<?php
do
{
if(preg_match('/-1/',$row_Recordset1['item']))
{
echo '<tr>';
echo '<td>'.$row_Recordset1['name'].'</td>';
echo '<td>'.$row_Recordset1['item'].'</td>';
}
else if(preg_match('/-2/',$row_Recordset1['item']))
{
echo '<td>'.$row_Recordset1['item'].'</td>';
echo '</tr>';
}
}while($row_Recordset1 = mysql_fetch_assoc($Recordset1));
?>
</table>
結果如下
但如果我希望圖長的像下面這樣
請問程式碼要怎麼寫呢
先不討論資料與程式其他部份可能會有的問題,
就您的問題來說,問題點僅在</tr>這結束標籤,
簡單的去解就是do while迴圈前先設定個暫時變數,迴圈內將它加1,迴圈末將它除以一列預期欄數,若餘數為0就加上</tr>。
以本題為例,長的應該像下面那樣:
<pre class="c" name="code">
.....
$i=0;
do{
$i++;
......其他程式碼.......
...
if($i%6 == 0){
echo '</tr>';
}
}while(...)
.....
當然,若欄位有可能是空的,那就必須要補<td>及暫存變數的值進去,免得表格不正確。
假如你想把所有的 record 只秀成一列,那麼就直接把 <tr> </tr> 移到 php 碼之外就行了。
<pre class="c" name="code"><table border="2">
<tr>
<?php
:
:
?>
</tr>
</table>
建議常數字串比對的情況,不要用 RegExp,這是殺雞用牛刀,徒浪費程式效能。你要比 -1, -2 這種常數字串,就用 str??? 之類的函數來比即可。
<pre class="c" name="code"><table border="2">
<tr>
<?php
do
{
switch (substr($row_Recordset1['item'], -2)) // 取 item 最後兩個字元
{
case '-1':
echo '<td>',$row_Recordset1['name'],'</td>';
case '-2':
echo '<td>',$row_Recordset1['item'],'</td>';
break;
}
}while($row_Recordset1 = mysql_fetch_assoc($Recordset1));
?>
</tr>
</table>