将分组数据包装在 DIV (PHP) 中


Wrap Grouped Data in DIV (PHP)

这是我的代码:

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

我想要但无法弄清楚的是将状态标题和组织列表包装在他们自己的 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>

我怎样才能做到这一点?

不得不给自己写一个小表格,这样我就可以想象你想讲的整个故事。重写了我的答案以更好地适应您要做的事情。你需要一个有条件的内部查询(如果需要稍微调整,请编辑它,但你明白了)。

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>