首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP中的动态Optgroup

PHP中的动态Optgroup
EN

Stack Overflow用户
提问于 2017-03-24 22:43:38
回答 2查看 1K关注 0票数 0

这是我当前的SQL表,我正在使用它为我的php下拉菜单抓取数据。这样做的主要目标是将其转换为一个下拉列表,其中包含以下成员的optgroup,依此类推……

代码语言:javascript
复制
+-----------+------------+-----------+
| GroupName | MemberName | ValueName |
+-----------+------------+-----------+
| 1st Team  | Joe Bob    | Joe       |
| 1st Team  | Catherine  | Kat       |
| 2nd Team  | Tommy      | Tom       |
| 3rd Team  | John Razks | John      |
+-----------+------------+-----------+
 Table name: Members

基本上,最终的结果就是下面的代码。它将是一个名为“第一个团队”的选项组的下拉列表,并具有下面的成员ect。用于第二组和第三组,以此类推。

代码语言:javascript
复制
<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类将出现在下拉列表中,成员将位于下面。

代码语言:javascript
复制
<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>

我对该怎么做一点也不确定。我看过其他人的例子,但不确定如何实现这一步。

EN

回答 2

Stack Overflow用户

发布于 2017-03-24 23:20:42

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

我相信你可以改进这一点,但这应该会让你振作起来。

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

代码语言:javascript
复制
$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>';
票数 1
EN

Stack Overflow用户

发布于 2017-03-24 23:24:19

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

代码语言:javascript
复制
// 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>";
    }
}

我还没有测试过这一点,但相信这会对你有所帮助。你可以做一些改进。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43002425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档