首页 > 解决方案 > 使用 PHP 将 MySQL 结果拆分为 3 列

问题描述

我正在尝试将我的数据库中的结果输出到 3 列(不同数量的记录)但没有任何成功。我找到了一些解决方案(是最接近的),但它们中的大多数都使用表格标记水平工作,而我的标记已经是列。

代码结构如下:

<div class="grid">
    <div class="col">
        result 1
        result 2
        result 3
    </div>
    <div class="col">
        result 4
        result 5
        result 6
    </div>
    <div class="col">
        result 7
        result 8
        result 9
    </div>
</div>

我目前的 PHP 尝试如下:

echo "<div class='col'>";

$result = $mysqli->query("SELECT * FROM stories ORDER BY RAND()");
$resultCount = $result->num_rows;
$i = 0;
while($row = $result->fetch_assoc())
{

if($i > 0 AND $i % 3 == 0) {
echo "</div><div class='col'>";
}

?>
  <div class="result">
      content here
  </div>
<?php
$i++;
}

echo "</div>";

这适用于我的 9 个结果示例,但是一旦有 10 个结果,它就会创建一个打破布局的第 4 列。我明白为什么,因为我告诉它每 3 个结果结束并开始一个新列而不会停止。

我知道我需要对记录总数进行处理并将其拆分为 3,但这就是我遇到的问题。如果有余数(例如 10),我想我希望它位于第一列,因此结果集将被拆分为 4/3/3。

非常感谢您的想法/建议!

注意:我认为使用不同的 HTML 结构会更容易做到这一点,但由于布局,它需要在列中垂直,因为各个结果是可以扩展/收缩的不同高度的框,因此在结构上它需要保持像这样。

标签: php

解决方案


这里举个例子。我在循环之前打开一个 div 并在循环之后关闭它并用 3 行填充它并关闭并再次打开。

希望能帮助到你。

<?php

    $result = $mysqli->query("SELECT * FROM stories ORDER BY RAND()");
    $resultCount = $result->num_rows;
    $totalCols = 0;
    $out = "<div class='col'>";
    while ($row = $result->fetch_assoc()) {

        if ($totalCols ==3) {
            $out .= "</div><div>" 
            $out .= $row['col'];
            $totalCols = 1;
        }else{
            $out .= $row['col'];
            $totalCols ++;
        }


    }

$out .= "</div>"; 
print "<div class='grid'> $out </div>" ;
?>

推荐阅读