【发布时间】:2019-02-27 14:28:38
【问题描述】:
我正在尝试将我的数据库中的结果输出到 3 列(不同数量的记录),但没有任何成功。我找到了一些解决方案(this 是最接近的),但它们中的大多数都使用表格标记水平工作,而我的标记已经是列。
代码结构如下:
<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 结构更容易做到这一点,但由于布局的原因,它需要在列中垂直排列,因为各个结果是可以扩展/收缩的不同高度的框,所以在结构上它需要保持这样。
【问题讨论】:
-
您想知道如何在 3 列网格上输出数组。这里不需要包含任何sql。
-
我想我只会有一系列 li 元素,然后使用 css 进行格式化 - 在后台使用 masonry/packery (packery.metafizzy.co) 之类的东西 - 但我不这样做这种事情很多,所以我可能有点脱节。
-
@Strawberry 好的 - 考虑到我正在尝试做的事情的明显复杂性,最好从布局的角度来解决这个问题。那个砌体例子看起来不错,谢谢。
标签: php