簡體   English   中英

PHP中的動態Optgroup

[英]Dynamic Optgroup in PHP

這是我當前使用的SQL表,用於獲取PHP下拉列表的數據。 這樣做的主要目的是將其變成一個下拉菜單,該下拉菜單具有一個optgroup及其下面的成員,依此類推...

 +-----------+------------+-----------+ | GroupName | MemberName | ValueName | +-----------+------------+-----------+ | 1st Team | Joe Bob | Joe | | 1st Team | Catherine | Kat | | 2nd Team | Tommy | Tom | | 3rd Team | John Razks | John | +-----------+------------+-----------+ Table name: Members 

基本上,最終的結果是下面的代碼。 這將是一個名為“ 1st Team”的optgroup的下拉列表,其成員如下。 代表二隊和三隊等等。

 <optgroup class="1st Team"> <option value="Joe">Joe Bob</option> <option value="Kat">Catherine</option> </optgroup> <optgroup class="2nd Team"> <option value="Tom">Tommy</option> </optgroup> <optgroup class="3rd Team"> <option value="John">John Razks</option> </optgroup> 

現在,這就是我從SQL表中獲取信息的方式。 這可以正常工作,但是如果我想添加一個新的GroupName,那么我就必須在我的主頁上添加一個新代碼,而我不想這樣做。

嘗試使其動態化,以便如果SQL表使用新的GroupName更新,則下拉列表中將出現一個新的optgroup類,而其成員將位於下面。

 <optgroup class="1st Team"> <?php $conn = mysqli_connect("#connect_to_sql"); if(!$conn){ die("Connection Failed".myslqi_connect_error()); } $result = mysqli_query($conn, "SELECT distinct MemberName from Members where GroupName = "1st Team" order by MemberName ASC"); while ($row = mysqli_fetch_assoc($result)){ unset($membername, $groupname); $groupname = $row['GroupName']; $membername = $row['MemberName']; echo '<option value="'.$membername.'">'.$membername.'</option>'; } ?> </optgroup> 

我根本不怎么做。 我看過其他人的示例,但不確定如何執行此步驟。

這不是最優雅的方法,但是您可以用這種方式建立您的組,它的工作是檢查組的名稱,並在每次名稱更改時將其更改為新的optgroup,$ first var就在那里,所以它沒有。 t第一次添加結束標記。

我敢肯定,您可以對此進行改進,但是它應該可以幫助您前進。

它確實依賴於組名稱的一致命名約定,因此,正如我所說,我相信您可以對此進行改進。 我還沒有包括連接檢查,因為您已經在示例中完成了連接檢查

$result = mysqli_query($conn, "SELECT * FROM Members ORDER BY GroupName");
$groupName = '';
$first = true;
echo '<select>';
while ($row = mysqli_fetch_assoc($result)){
    if ($row['GroupName'] != $groupName) {
        $groupName = $row['GroupName']; // Just set the new group name
        if (!$first) { // Add a closing tag when we change the group, but only if we're not in the first loop
            echo '</optgroup>';
        } else {
            $first = false; // Make sure we don't close the tag first time, but do after the first loop
        }
        echo '<optgroup label="' . $groupName . '">';
    }
    // We want to echo the options every loop so it's outside the if condition
    echo '<option value="' . $row['MemberName'] . '">' . $row['ValueName'] . '</option>';
}
echo '</select>';

首先從數據庫中獲取所有記錄。 創建一個以鍵作為組名的數組。 循環新數組以生成所需的輸出。

// query to get all records from database table
$result = mysqli_query($conn, "SELECT distinct MemberName,GroupName,ValueName from Members order by MemberName ASC");
while ($row = mysqli_fetch_assoc($result)){
    // generate an array with keys as group name
    $array[$row['GroupName']][] = $row;
}

// loop the array to create optgroup
foreach($array as $key=>$value){
    // check if its an array
    if(is_array($value)){
        // create optgroup for each groupname
        echo "<optgroup class='".$key."'>";
        foreach($value as $k=>$v){
            echo "<option value='".$v['membername']."'>'".$v['membername']."'</option>";
        }
        echo "</optgroup>";
    }
}

我尚未對此進行測試,但是可以肯定會有所幫助。 您可以進行改進。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM