按字母将MySQL数据划分为四个相等的引导程序行顺序

时间:2019-05-04 15:00:58

标签: php bootstrap-4

我有一个类别表,我想将类别数据动态显示为4个相等的自举程序,每行4行,并且数据必须按字母顺序显示。

首先,我计算数据的数量并除以4,然后运行4个查询以找到前25个数据,在第二个查询中运行接下来的25个数据,依此类推,但是正在寻找更好的解决方案。

$catCount = Category::all()->count();

$inOneRow = intval( $catCount / 4);

我想要什么

enter image description here

1 个答案:

答案 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>

Here is a fiddle


更容易理解,尽管示例可能更慢:

<?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>

Here is a fiddle


注意:容器的宽度将为其父容器的100%,除非另有样式。 默认情况下,列宽将相等。参见Bootstrap Grid