我有一个从简单的mysql选择查询生成的长列表 目前(如下面的代码所示)我只是创建每个记录的表行列表。所以,没什么复杂的。
但是,我想将其分成多个列,具体取决于返回的结果数。我一直在围绕如何在php中计算这个数据,我没有得到我需要的结果。
<table>
<?
$query = mysql_query("SELECT * FROM `sometable`");
while($rows = mysql_fetch_array($query)){
?>
<tr>
<td><?php echo $rows['someRecord']; ?></td>
</tr>
<? } ?>
</table>
显然,生成了一列。因此,如果返回的记录达到10,那么我想创建一个新列。换句话说,如果返回的结果是12,我有2列。如果我有22个结果,我将有3列,依此类推。
答案 0 :(得分:1)
简单地做
<?php
while($row = mysql_fetch_row($query)) {
print "<tr>\n";
print "\t<td>";
foreach($row as $i => $value) {
if ($i >= 10 && $i % 10 === 0) {
print "</td>\n\t<td>";
}
print $value;
}
print "</td>\n";
print "</tr>\n";
}
答案 1 :(得分:0)
有趣的问题;我对此的前两次尝试是错误的(如下面的评论所示)。我假设你不想将元素连在一起,而是想要创建一个合适的表。如果concat适合你,请务必使用其他解决方案,因为它更加简单和优雅。
<?php
$totalCount = mysql_num_rows($query);
$colMax = 10;
$colcount = ceil($totalCount / $colMax);
$counter = 0;
while($row = mysql_fetch_assoc($query)) {
echo "<tr>";
for($i = 0; $i < $colCount; $i++) {
echo "<td>".$row['someRecord']."</td>";
}
echo "</tr>";
}
?>
答案 2 :(得分:0)
这可能是一种更简单的方法,但我试了一下:
<table>
<?
$result = mysql_query("SELECT * FROM `sometable`");
$maxRows = 10;
$requiredColumns = ceil($numRows/$maxRows);
$rowArray = array();
while($row = mysql_fetch_assoc($result)){
$rowArray[] = $row;
}
$tableArray = array();
$rowCounter = 0;
$columnCounter = 1;
foreach($rowArray as $row){
if($rowCounter % $maxRows == 0)
$columnCounter++;
$tableArray[$columnCounter][] = $row['someRecord'];
}
for($i = 0; $i < $maxRows; $i++){
echo "<tr>"
for($k = 1; $k <= $requiredColumns; $k++){
$cellContent = isset($tableArray[$k][$i])? $tableArray[$k][$i] : " ";
echo "<td>$cellContent</td>";
$k++;
}
$i++;
echo "</tr>"
}
?>
</table>
答案 3 :(得分:0)
我略微缩短了詹姆斯威廉的版本:
$maxRows = 10;
$tableArray = array();
$rownum = 0;
$result = mysql_query("SELECT * FROM `sometable`");
while($row = mysql_fetch_assoc($result))
{
$rownum = $rownum % $maxRows;
$tableArray[$rownum][] = $row['record'];
$rownum++;
}
// If you want empty table cells, just finish the cycle, else skip it:
for( ; $rownum < $maxRows; $rownum++)
{
$tableArray[$rownum][] = "";
}
foreach( $tableArray as $rowArray )
{
echo "<tr><td>";
echo implode( "</td><td>", $rowArray);
echo "</td></tr>\n";
}