这是我目前的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 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>
&#13;
现在,这就是我从SQL表中获取信息的方式。这工作正常,但如果我想添加一个新的GroupName,那么我将不得不在我的主页面添加一个新代码,我不想这样做。
尝试使其动态化,因此如果使用新的GroupName更新SQL表,则下拉列表中将出现一个新的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>
&#13;
对于该做什么我根本不是正面的。我看过其他人的例子,但不知道如何处理这一步。
答案 0 :(得分:1)
这不是最优雅的方式,但你可以用这种方式构建你的组,它正在做的是检查组的名称,并在每次名称更改时将其更改为新的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>';
答案 1 :(得分:1)
首先从数据库中获取所有记录。使用键作为组名创建一个数组。循环新数组以生成所需的输出。
// 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>";
}
}
我没有对此进行过测试,但相信这会对您有所帮助。你可以做出改进。