繁体   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