拆分长PHP生成的HTML表格?

时间:2016-08-31 16:38:26

标签: php html mysql

我使用MySql查询从我的数据库中选择数据,然后以HTML Table的形式打印。它工作得很好,很好,但有时表包含数百行,网页看起来非常难看。有没有办法将桌子并排分成2或3个半部分。

  

当前输出

enter image description here

  

所需的输出

enter image description here

  

PHP

<?php
....
echo "<h3>Classes attended :</h3>";
echo "<table class='dates' border='1'>";

 foreach ($results as $dates) {

    echo "<tr><td width='50%'>";
    echo $dates->db_date;
    echo "</td>";
    echo "<td width='50%'>";
    echo $dates->day_name;
    echo "</td>";
    echo "</tr>";

}
echo "</table>";
?>

实现它的最佳方法是什么? 帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

You can use PHP to determine in your loop if the loop index is divisible by a certain number using something like this:

echo "<h3>Classes attended :</h3>";
echo "<table class='dates' border='1'>";
$rowCount = 1;
$numRows = count($results);
$maxRows = 12;

foreach ($results as $dates) {

    echo "<tr><td width='50%'>";
    echo $dates->db_date;
    echo "</td>";
    echo "<td width='50%'>";
    echo $dates->day_name;
    echo "</td>";
    echo "</tr>";
    if($rowCount % $maxRows == 0 && $rowCount != $numRows)  {
       echo "</table><table class='dates' border='1'>";
    }
    $rowCount ++;
}

echo "</table>";

That's the basics of doing this. Basically in your loop you're testing each index to see if it's divisible by $maxRows, and if so then you're going to close your table and open a new one. You'll have to add the styling to place the tables side by side.

If you wanted to expand upon this concept you can set $maxRows to be an evaluation of $numRows. For instance if you wanted to split the items as close as possible to half in order to show just two tables, you could do... $numRows = count($results); $maxRows = round($numRows / 2);

答案 1 :(得分:1)

Inspired by Robert Wade's answer:

<?php
....
echo "<h3>Classes attended :</h3>";

 $i=0;
 $maxRows=10;
 foreach ($results as $dates) {
    $a=$i/$maxRows == 0 ? "<table class='dates' border='1'>":"";
    $b=$i/$maxRows == 0 ? "</table>":"";

    echo $a;
    echo "<tr><td width='50%'>";
    echo $dates->db_date;
    echo "</td>";
    echo "<td width='50%'>";
    echo $dates->day_name;
    echo "</td>";
    echo "</tr>";
    echo $b;

    $i++;
}
?>

At last, add some css style to the tables.

答案 2 :(得分:1)

You can also use array_chunk() for splitting your results. Or instead of displaing a lot of tables next to each other you can make pagination and get only some range in your query. For example:

SELECT * FROM `clients` LIMIT 5, 10 

Selects 10 rows beggining from row 5. Now, when you change your page, just change limit values.