多维 <optgroup> 和 <option> 每个 optgroup 具有重复的选项值

Multidimensional <optgroup> and <option> with duplicate option values for each optgroup

我应该可以得到这个,但我认为当前的大流行 'distancing' 已经烧毁了我的大脑。我也想知道这是否可能。我看过其他类似的问题(比如 optgroup with all option),但他们要么没有答案,要么我无法理解或复制它们。

我有一个根据 mysql 结果构建的数组: $skillArray[$row->disciplinename][$row->skillid] = strtoupper($row->skillname); 现在我正在尝试为每个 $row->disciplinename 构建一个带有 optgroups 的 'select'。在每个 optgroup 中,$row->skillid 是唯一的,但是 如果用户没有 select 特定的“disciplinename”,下拉结果会显示每个“$row->skillid”值——到目前为止它确实如此,没关系。 字段“$selJobSkill”是下拉列表中的任何内容 select。字段“$skill”只是一个与 $skillId 关联的名称。 这是 'select' 下拉菜单:

<select name="jobskill" id="jobskill" class="textfield" onchange="submit()">
                        <option value="0">(choose)</option>
                        <?php
                        foreach ($skillArray as $catname=>$cat) {
                            echo '<optgroup label="' . $this->catname . '">';
                            foreach ($cat as $skillID => $skill) {

                                $selected = ($skillID == $selJobSkill) ? ' selected' : ''; ?>
                                <option value="<?php echo $skillID; ?>" 
                                <?php echo $selected; ?>><?php echo $skill; ?></option>
                        <?php
                            }
                        }
                        echo "</optgroup>";
                        ?>
                    </select>
        

数组的一个例子是:

 ( [Health] => Array ( [1] => COTA [2] => OT [3] => PT [4] => PTA [5] => SLP [6] => MGMT [7] => DPT )
 [Tech] => Array ( [1] => RESP_TECH [2] => RESP_THERA [3] => PHARM_TECH [4] => US_TECH [5] => CT/MRI [6] => SURG_TECH [7] => RAD_TECH [8] => CLS [11] => SCRUB_TECH ) ) 

第一个问题是我没有得到 optgroup 名称——我得到的是一个空白条目。 '$cat' 和 '$catname' 都没有出现。 第二个问题是他们希望能够获得与 学科名称,即使他们没有 select 学科名称(它在另一个下拉列表中,默认值为 'All')。 在每个 'disciplinename' 中,有一个 'skillid',我的任务是找到一种方法来基于 'disciplinename'(作为 optgroup)创建此下拉列表,然后如果 用户从下拉列表中选择了一个 skillid 而没有选择 'disciplinename',我应该将那个 disciplinename 的 skilled 标记为 selected 的。 这种 'select' 下拉菜单是否可行?

一两天后,我意识到了问题并解决了问题。首先,我没有根据数据库结果正确构建数组。解决办法是: $this->model->skillArray[$row->classid .'-'.$row->disciplinename][] = array( $row->skillid => $row->skillname );

第二件事是我没有正确访问数组。我知道这些事情中的一个或两个是导致问题的原因,但是深夜等等……你们都经历过。访问数组的修复是:

foreach ($this->model->skillArray as $key => $cat) {
        echo '<optgroup label="' . substr($key, 2) . '">';
        foreach ($cat as $skillset => $skill) {
                foreach ($skill as $skillId => $skillname) {
                    echo "<option data-cat='$key' value='$skillId'>" .  $skillname . "</option>";
                }
        }
        echo "</optgroup>";
}

我没有深入数组以提取值。我喜欢@IVO GELOV 的建议,但决定将 HTML5“data-”属性与“