【问题标题】:Wrap Grouped Data in DIV (PHP)在 DIV 中包装分组数据 (PHP)
【发布时间】:2016-01-19 21:18:45
【问题描述】:

这是我的代码:

$sqlc = "SELECT DISTINCT UserID, OrgID, OrgName, StateID, StateName FROM vw_AgentService WHERE UserID = " . $id . "ORDER BY StateID";
$stmtc = sqlsrv_query( $conn, $sqlc );
if( $stmt === false) {
    die( print_r( sqlsrv_errors(), true) );
}
$current_state = null;
while( $rowc = sqlsrv_fetch_array( $stmtc, SQLSRV_FETCH_ASSOC) ) {
    if ($rowc["StateID"] != $current_state) {
        $current_state = $rowc['StateID'];
        echo "<h4>".$rowc['StateName']."</h4>";
    }
    echo "<p>".$rowc['OrgName']."</p>";
};

我从中提取数据的表中每个组织都有一行,每个组织都包含一列,标识其对应的美国州。输出显示状态一次,然后列出该状态内的所有组织,如下所示:

<h4>Federal (non-State)</h4>
<p>Environmental Protection Agency<p>

<h4>Texas</h4>
<p>Texas Legislature</p>
<p>Texas Commission on Environmental Quality</p>

我想要但还没有弄清楚的是将 State 标题和 Organizations 列表包装在他们自己的 DIV 中,这样我就可以将它们显示为列而不是一直向下的直接列表,像这样:

<div class="StateOrgs">
<h4>Federal (non-State)</h4>
<p>Environmental Protection Agency<p>
</div>

<div class="StateOrgs">
<h4>Texas</h4>
<p>Texas Legislature</p>
<p>Texas Commission on Environmental Quality</p>
</div>

我怎样才能做到这一点?

【问题讨论】:

    标签: php arrays while-loop sqlsrv


    【解决方案1】:

    不得不给自己写一张小桌子,这样我就可以想象你想要讲述的整个故事。重写了我的答案,以更好地适应您正在尝试做的事情。您需要一个有条件的内部查询(如果需要稍作调整,请对其进行编辑,但您明白了)。

    while( $rowc = sqlsrv_fetch_array( $stmtc, SQLSRV_FETCH_ASSOC) ) {
    if ($rowc["StateID"] != $current_state) {
        $current_state = $rowc['StateID'];
        echo "<div class='StateOrgs'>";
        echo "<h4>".$rowc['StateName']."</h4>";
        while($innerqry = sqlsrv_fetch_array($stmtc, SQLSRV_FETCH_ASSOC)){ 
           if($innerqry['StateID']==$current_state){
           echo "<p>".$innerqry['OrgName']."</p>";}
           }
        echo "</div>
        }
    };
    

    这是我必须输入的内容以可视化您要执行的操作:

     SELECT DISTINCT UserID, OrgID, OrgName, StateID, StateName 
     FROM vw_AgentService WHERE UserID = " . $id . "ORDER BY StateID
    
              stateid    statename
     org 5    fed001     Federal
     org 3    fed001     Federal
     org 1    mid001     Maryland
     org 4    mid001     Maryland
     org 2    tid002     Tennesee
    
     <div>
     <h4>Fed</h4>
     <p>org 5</p>
     <p>org 3</p>
     </div>
    
     <div>
     <h4>Maryland</h4>
     <p>org 1</p>
     <p>org 4</p>
     </div>
    

    【讨论】:

    • 这种方法的问题不仅在于它删除了重复的州名(我想要的),而且当某些州包含多个时,它会将 Orgs 列表限制为一个。
    • 已编辑答案以尝试解决您正在寻找的这两件事。实际上编辑了几次,因为我一直在寻找错别字。它可能不会是完美的,但我认为它会让你知道你必须做什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多