这是我当前的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
基本上,最终的结果就是下面的代码。它将是一个名为“第一个团队”的选项组的下拉列表,并具有下面的成员ect。用于第二组和第三组,以此类推。
<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>
我对该怎么做一点也不确定。我看过其他人的例子,但不确定如何实现这一步。
发布于 2017-03-24 23:20:42
这不是最优雅的方式,但你可以这样构建你的组,它所做的是检查组的名称,并在每次名称更改时将其更改为新的optgroup,$first变量就在那里,所以它不会在第一次添加结束标记。
我相信你可以改进这一点,但这应该会让你振作起来。
它确实在某种程度上依赖于组名称的一致命名约定,所以正如我所说的,我相信您可以改进它。我还没有包括连接检查,因为您已经在示例中这样做了
$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>';发布于 2017-03-24 23:24:19
首先从数据库中获取所有记录。创建一个以密钥作为组名称的数组。循环新数组以生成所需的输出。
// 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>";
}
}我还没有测试过这一点,但相信这会对你有所帮助。你可以做一些改进。
https://stackoverflow.com/questions/43002425
复制相似问题