首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将返回的数据拆分为相等的3个div列

将返回的数据拆分为相等的3个div列
EN

Stack Overflow用户
提问于 2020-03-11 14:30:55
回答 2查看 52关注 0票数 0

我正在尝试使用div显示数据库中的数据。我想把返回的数据分成3列,到目前为止,我只能把数据分成2列。

代码语言:javascript
复制
$column = '<div class="col-lg-6">';
$modulecounter = 0;

$moduletotalquery = "SELECT COUNT(MODULEID) AS MODULEID FROM ASMODULERIGHTS";
$moduletotalsql = oci_parse($conn, $moduletotalquery);
oci_execute($moduletotalsql);
$moduletotalrow = oci_fetch_array($moduletotalsql);

$modulequery = "SELECT MODULEID, MODULEDESC FROM ASMODULERIGHTS ORDER BY MODULEID";
$modulesql = oci_parse($conn, $modulequery);
$moduleexec = oci_execute($modulesql);

if($moduleexec){
    while($modulerow = oci_fetch_array($modulesql)){
        $modulecounter++;
        $moduleid = "m". $modulecounter;

        $column .= '<div class="col-lg-auto">
                        <div class="custom-control custom-checkbox">
                            <input type="checkbox" class="custom-control-input modulerights" id="'. $moduleid .'">
                            <label class="custom-control-label" for="'. $moduleid .'">'. $modulerow['MODULEDESC'] .'</label>
                        </div>
                    </div>';

       if ($modulecounter == floor($moduletotalrow['MODULEID'] / 2)) {
            $column .= '</div><div class="col-lg-6">';
       }
    }
}

$column .= '</div>';

echo $column;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-11 16:11:29

将数据分成块,然后将<div>添加到块中:

代码语言:javascript
复制
<?php

$modulecounter = 0;
$moduletotalquery = "SELECT COUNT(MODULEID) AS MODULEID FROM ASMODULERIGHTS";
$moduletotalsql = oci_parse($conn, $moduletotalquery);
oci_execute($moduletotalsql);
$moduletotalrow = oci_fetch_array($moduletotalsql);

$modulequery = "SELECT MODULEID, MODULEDESC FROM ASMODULERIGHTS ORDER BY MODULEID";
$modulesql = oci_parse($conn, $modulequery);
$moduleexec = oci_execute($modulesql);

$nrows = oci_fetch_all($modulesql, $res, null, null, OCI_FETCHSTATEMENT_BY_ROW+OCI_ASSOC);

$column = '';
if(count($nrows) > 0){
    $divideCount = ceil(count($nrows)/3);

    $results = array_chunk($res ,$divideCount);
    foreach($results as $result){
        $column .= '<div class="col-lg-6">';
        foreach($result as $res){
            $modulecounter++;
            $moduleid = "m". $modulecounter;

            $column .= '<div class="col-lg-auto">
                <div class="custom-control custom-checkbox">
                    <input type="checkbox" class="custom-control-input modulerights" id="'. $moduleid .'">
                    <label class="custom-control-label" for="'. $moduleid .'">'. $res['MODULEDESC'] .'</label>
                </div>
            </div>';
        }

        $column .= '</div>';
    }

}

echo $column;

示例输出:- https://3v4l.org/TlJT2

票数 1
EN

Stack Overflow用户

发布于 2020-03-12 04:32:58

事实是:我以前从来没有用过甲骨文,也从来没有回答过甲骨文的问题,但快速浏览一下php手册就会发现,最初的帖子做了太多的查询,Anant的答案根本不能像帖子那样工作。

下面是一个脚本,它使用模数计算来确定是否应该创建一个新列。如果模数计算结果为零,则需要一个新列。如果$i为零,则还没有要关闭的列,因为它是循环的第一次迭代。如果结果集中有任何行,循环将不会关闭最后一列--这是在循环结束后有条件地完成的。

代码语言:javascript
复制
$stmt = oci_parse($conn, "SELECT MODULEID, MODULEDESC FROM ASMODULERIGHTS ORDER BY MODULEID");
oci_execute($stmt);
$count = oci_fetch_all($stmt, $result, 0, -1, OCI_FETCHSTATEMENT_BY_ROW);
$maxPerColumn = ceil($count / 3);
$output = '';
for ($i = 0; $i < $count; ++$i) {
    if (!($i % $maxPerColumn)) {
        if ($i) {
            $output .= '</div>';
        }
        $output .= '<div class="col-lg-4">';
    }
    $output .= '<div class="col-lg-auto">
                    <div class="custom-control custom-checkbox">
                        <input type="checkbox" class="custom-control-input modulerights" id="m'. $i .'">
                        <label class="custom-control-label" for="m'. $i .'">' . $result[$i]['MODULEDESC'] . '</label>
                    </div>
                </div>';
}
if ($count) {
    $output .= '</div>';
}
echo $output;

对于一些开发人员来说,使用array_chunk()可能是一个更有吸引力的解决方案,尽管有内部循环,因为需要理解条件逻辑。请注意,$i计数器丢失了,为了简单起见,改用了MODULEID

代码语言:javascript
复制
$output = '';
foreach (array_chunk($result, ceil($count / 3)) as $group) {
    $output .= '<div class="col-lg-4">';
    foreach ($group as $row) {
        $output .= '<div class="col-lg-auto">
                        <div class="custom-control custom-checkbox">
                            <input type="checkbox" class="custom-control-input modulerights" id="m'. $row['MODULEID'] .'">
                            <label class="custom-control-label" for="m'. $row['MODULEID'] .'">' . $row['MODULEDESC'] . '</label>
                        </div>
                    </div>';
    }
    $output .= '</div>';
}
echo $output;

引导程序列的总宽度为12,因此这3列中的每一列都应该在类声明中使用4。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60630383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档