这两个for循环未嵌套在您的代码中:
foreach ($groups as $label => $opt) { ?> <optgroup label="<?php echo $label; ?>"><?php } <-- wrong here foreach ($groups[$label] as $id => $name) { ?> <option value="<?php echo $id; ?>"><?php echo $name; ?></option><?php } ?>结果是首先创建了所有的opt组,然后添加了最后一个组的雇员(因为
$label并且
$opt在循环完成后也可以使用)。
您必须嵌套循环( 对控制结构使用替代语法 ):
<?php foreach($groups as $label => $opt): ?> <optgroup label="<?php echo $label; ?>"> <?php foreach ($opt as $id => $name): ?> <option value="<?php echo $id; ?>"><?php echo $name; ?></option> <?php endforeach; ?> </optgroup><?php endforeach; ?>
此外,我认为您在创建数组时必须使用
emp_id,而不是
grp_id:
while ($qa = $employees->GetRows()) { $groups[$qa['groupname']][$qa['emp_id']] = $qa['empname'];}


