php - 使用 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 结构会更容易做到这一点,但由于布局,它需要在列中垂直,因为各个结果是可以扩展/收缩的不同高度的框,因此在结构上它需要保持像这样。
解决方案
这里举个例子。我在循环之前打开一个 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>" ;
?>
推荐阅读
- javascript - 从嵌入式 Plunker/StackBlitz 等代码编辑器发送和获取数据
- owl-carousel-2 - owl-carousel 在完成加载之前垂直显示项目
- computer-vision - 为什么计算机视觉在提交图像子集时会识别更多文本?
- python - 使用python拉href标签
- php - 如何在 PHP 5.6 的 mysql 查询中添加引号
- java - 自定义相机应用程序无法存储大(尺寸)图像
- javascript - 使用 vscode-regex 插件?
- php - Laravel 虚拟列无法保存
- reactjs - 你可以将 Sketch 中的 Material 主题直接导出到 React 吗?
- keras - Keras 张量板回调不保存训练/验证精度