我有一个类别表,我想将类别数据动态显示为4个相等的自举程序,每行4行,并且数据必须按字母顺序显示。
首先,我计算数据的数量并除以4,然后运行4个查询以找到前25个数据,在第二个查询中运行接下来的25个数据,依此类推,但是正在寻找更好的解决方案。
$catCount = Category::all()->count();
$inOneRow = intval( $catCount / 4);
我想要什么
答案 0 :(得分:0)
假设类别是类别名称的表-您可以一次选择所有类别,然后在查询中使用ORDER BY clause:
$query = 'SELECT name FROM db.categories ORDER BY name ASC;';
您也可以在结果集上使用sort:
$query = 'SELECT name FROM db.categories;';
/* execute query here... */
sort($resultSet);
假设您已执行此操作,则使用引导网格即可轻松进行样式设置(注意小提琴中的模拟结果集):
<?php
const NUM_COLS = 4;
$numResults = count($dummyResult);
$numPerCol = round($numResults / NUM_COLS);
?>
<div class="container">
<div class="row">
<?php
for($i = 0, $col = 0; $col < NUM_COLS; $col++){
echo '<div class="col">';
for($colLimit = min($numResults, $i + $numPerCol); $i < $colLimit; $i++){
echo '<div class="row">'.$dummyResult[$i]['category'].'</div>';
}
echo '</div>';
}
?>
</div>
</div>
更容易理解,尽管示例可能更慢:
<?php
const NUM_COLS = 4;
$numResults = count($dummyResult);
$numPerCol = round($numResults / NUM_COLS);
?>
<div class="container">
<div class="row">
<?php
for($i = 0; $i < NUM_COLS; $i++){
echo '<div class="col">';
foreach( array_splice($dummyResult, 0, $numPerCol) as $row ){
echo '<div class="col">'.$row['category'].'</div>';
}
echo '</div>';
}
?>
</div>
</div>
注意:容器的宽度将为其父容器的100%,除非另有样式。 默认情况下,列宽将相等。参见Bootstrap Grid。