PHP中的动态Optgroup

PHP中的动态Optgroup,php,mysqli,dynamic,drop-down-menu,optgroup,Php,Mysqli,Dynamic,Drop Down Menu,Optgroup,这是我当前使用的SQL表,用于获取php下拉列表中的数据。其主要目的是将其转化为一个下拉列表,其中包含一个包含以下成员的optgroup,以此类推 +-----------+------------+-----------+ |GroupName | MemberName | ValueName| +-----------+------------+-----------+ |第一队|乔·鲍勃|乔| |第一队|凯瑟琳|凯特| |第二队|汤米|汤姆| |第三队|约翰·拉兹克斯|约翰| +----

这是我当前使用的SQL表,用于获取php下拉列表中的数据。其主要目的是将其转化为一个下拉列表,其中包含一个包含以下成员的optgroup,以此类推

+-----------+------------+-----------+
|GroupName | MemberName | ValueName|
+-----------+------------+-----------+
|第一队|乔·鲍勃|乔|
|第一队|凯瑟琳|凯特|
|第二队|汤米|汤姆|
|第三队|约翰·拉兹克斯|约翰|
+-----------+------------+-----------+

表名:Members
这不是最优雅的方式,但您可以通过这种方式构建组,它所做的是检查组名,并在每次名称更改时将其更改为新的optgroup,$first var就在那里,这样就不会在第一次添加结束标记

我相信你可以在这方面有所改进,但这应该会让你继续前进

它确实有点依赖于组名的一致命名约定,所以正如我所说的,我相信您可以改进它。我还没有包括连接检查,因为您已经在示例中进行了连接检查

$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>';
$result=mysqli_query($conn,“按组名从成员中选择*);
$groupName='';
$first=true;
回声';
while($row=mysqli\u fetch\u assoc($result)){
如果($row['GroupName']!=$GroupName){
$groupName=$row['groupName'];//只需设置新的组名
如果(!$first){//在更改组时添加结束标记,但仅当我们不在第一个循环中时
回声';
}否则{
$first=false;//确保我们不是第一次关闭标记,而是在第一次循环后关闭标记
}
回声';
}
//我们希望每个循环都回显选项,因此它不在if条件下
回显'.$row['ValueName'].';
}
回声';

这不是最优雅的方式,但您可以通过这种方式构建组,它所做的是检查组名,并在每次名称更改时将其更改为新的optgroup,$first var就在那里,这样就不会在第一次添加结束标记

我相信你可以在这方面有所改进,但这应该会让你继续前进

它确实有点依赖于组名的一致命名约定,所以正如我所说的,我相信您可以改进它。我还没有包括连接检查,因为您已经在示例中进行了连接检查

$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>';
$result=mysqli_query($conn,“按组名从成员中选择*);
$groupName='';
$first=true;
回声';
while($row=mysqli\u fetch\u assoc($result)){
如果($row['GroupName']!=$GroupName){
$groupName=$row['groupName'];//只需设置新的组名
如果(!$first){//在更改组时添加结束标记,但仅当我们不在第一个循环中时
回声';
}否则{
$first=false;//确保我们不是第一次关闭标记,而是在第一次循环后关闭标记
}
回声';
}
//我们希望每个循环都回显选项,因此它不在if条件下
回显'.$row['ValueName'].';
}
回声';

首先从数据库中获取所有记录。创建一个以键作为组名的数组。循环新数组以生成所需的输出

// 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>";
    }
}
//从数据库表中获取所有记录的查询
$result=mysqli_query($conn,“按成员名ASC从成员顺序中选择不同的成员名、组名、值名”);
while($row=mysqli\u fetch\u assoc($result)){
//生成以键作为组名的数组
$array[$row['GroupName'][]=$row;
}
//循环数组以创建optgroup
foreach($key=>$value的数组){
//检查它是否是数组
if(是_数组($value)){
//为每个groupname创建optgroup
回声“;
foreach($k=>v的值){
回显“'”$v['membername']。“'”;
}
回声“;
}
}

我还没有测试过,但肯定这会对你有帮助。您可以进行改进。

首先从数据库中获取所有记录。创建一个以键作为组名的数组。循环新数组以生成所需的输出

// 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>";
    }
}
//从数据库表中获取所有记录的查询
$result=mysqli_query($conn,“按成员名ASC从成员顺序中选择不同的成员名、组名、值名”);
while($row=mysqli\u fetch\u assoc($result)){
//生成以键作为组名的数组
$array[$row['GroupName'][]=$row;
}
//循环数组以创建optgroup
foreach($key=>$value的数组){
//检查它是否是数组
if(是_数组($value)){
//为每个groupname创建optgroup
回声“;
foreach($k=>v的值){
回显“'”$v['membername']。“'”;
}
回声“;
}
}
我还没有测试过,但肯定这会对你有帮助。你可以做出改进