我尝试以这种方式在网页中按类别打印项目的内容:
Category1:
Item1 item2 item3
item4 item5...
Category2
item1 item2 ...
下面是我的PHP代码:
$cat="";
$maxcols = 3;
$i = 0;
while ($row = $result->fetch_assoc()) {
if ($i == $maxcols) {
$i = 0;
echo "</tr><tr>";
}
if($row['name']!=$cat)
{
echo "<table>
<tr><td collspan='3'>".$row['name']."</td></tr>
<tr>";
}
echo "<td>".$row['title']."</td>";
$cat=$row['name'];
$i++;
}
while ($i <= $maxcols) {
echo "<td> </td>";
$i++;
echo "</table>";
}
我得到的是:
<table>
<tr><td collspan='3'>Archivers</td></tr>
<tr><td>7-Zip</td><td>IZArc</td><td>dfssdfsdf sdfsdf</td></tr><tr><td>fgdgdfgd</td><td>sdfsdfsdfsdf dsfsdfsd</td><table>
<tr><td collspan='3'>Benchmark</td></tr>
<tr><td>Fresh Diagnose</td><td> </td></table>
我想要得到的是:
<table>
<tr><td collspan='3'>Archivers</td></tr>
<tr><td>7-Zip</td><td>IZArc</td><td>dfssdfsdf sdfsdf</td></tr>
<tr><td>fgdgdfgd</td><td>sdfsdfsdfsdf dsfsdfsd</td>**<td> </td></tr>
</table>**
<table>
<tr><td collspan='3'>Benchmark</td></tr>
<tr><td>Fresh Diagnose</td><td> </td><td> </td>
</table>
发布于 2013-07-01 00:21:44
首先,你有非常“混乱”的代码。我想你需要更多的代码来添加星号之间的部分,但我认为你应该使用一种更干净的方法。
我想您使用的是mysql,它支持GROUP_CONCAT()-function。在这种情况下使用它将是明智的。
进行查询:
SELECT name, GROUP_CONCAT( title SEPERATOR '|') as titles FROM your_database GROUP BY name
现在,每个类别的结果都在一行中。
//Amount of rows
$maxcols = 3;
while( $row = $result->fetch_assoc() ) {
//The seperator needs to be something that isn't in the values it seperates
//This creates an array with the titles for this category
$titles = explode( '|', $row['titles'] );
echo '
<table>
<tr>
<td colspan="' .$maxcols. '">' .$row['name']. '</td>
</tr>';
//$offset + $i is the position in the array of titles
$offset = 0;
//This loop ensures each row is properly opened and closed
while( $offset < count( $titles ) ) {
echo '<tr>';
//This will ensure each row has $maxcols td's in it
for( $i = 0; $i < $maxcols; $i++ ) {
if( isset( $titles[ $offset + $i ] ) ) {
echo '<td>' .$titles[ $offset + $i ]. '</td>';
} else {
echo '<td> </td>';
}
}
$offset += $maxcols;
echo '</tr>';
}
echo '</table>';
}
发布于 2013-07-01 21:24:43
非常感谢你,Sumurai8!你的想法很管用。这是我的php代码:
<?php
include_once('include/db.inc.php');
$sql="SELECT m.name, GROUP_CONCAT(s.title order by s.title SEPARATOR '|' ) as titles FROM menu m, software s where m.id=s.category
GROUP BY m.name
order by m.name";
$result = $mysqli->query($sql);
$cat="";
$maxcols = 3;
//$i = 0;
echo "
<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>
<html>
<head>
<title>content</title>
<meta content='text/html; charset=utf-8' http-equiv='content-type'>
<meta content='Software Details' name='description'>
<link href='styles/fontstyle.css' rel='stylesheet' type='text/css'>
<link href='styles/style.css' rel='stylesheet' type='text/css'>
</head>
<body class='body'>";
while( $row = $result->fetch_assoc() ) {
//The seperator needs to be something that isn't in the values it seperates
//This creates an array with the titles for this category
$titles = explode( '|', $row['titles'] );
echo "
<table>
<tr><td colspan='" .$maxcols. "'>" .$row['name']. "</td></tr> \n";
//$offset + $i is the position in the array of titles
$offset = 0;
//This loop ensures each row is properly opened and closed
while( $offset < count( $titles ) ) {
echo "<tr>";
//This will ensure each row has $maxcols td's in it
for( $i = 0; $i < $maxcols; $i++ ) {
if( isset( $titles[ $offset + $i ] ) ) {
echo "<td>" .$titles[ $offset + $i ]. "</td>";
} else {
echo "<td> </td>";
}
}
$offset += $maxcols;
echo "</tr> \n";
}
echo "</table><br> \n";
}
这就是我想要的输出:
<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>
<html>
<head>
<title>content</title>
<meta content='text/html; charset=utf-8' http-equiv='content-type'>
<meta content='Software Details' name='description'>
<link href='styles/fontstyle.css' rel='stylesheet' type='text/css'>
<link href='styles/style.css' rel='stylesheet' type='text/css'>
</head>
<body class='body'>
<table>
<tr><td colspan='3'>Archivers</td></tr>
<tr><td>7-Zip</td><td>IZArc</td><td>dfssdfsdf sdfsdf</td></tr>
<tr><td>fgdgdfgd</td><td>sdfsdfsdfsdf dsfsdf</td><td> </td></tr>
</table><br>
<table>
<tr><td colspan='3'>Benchmark</td></tr>
<tr><td>Fresh Diagnose</td><td> </td><td> </td></tr>
</table><br>
</body>
</html>
https://stackoverflow.com/questions/17391315
复制相似问题