如何使用 PHP 数组中的值在 HTML select 控件中设置多个默认值?

How can I set multiple default values in an HTML select control using the values in a PHP array?

这是这里解决的问题的扩展:Set default value for HTML select control in PHP 但是我想填写多个匹配的值,要填写的值存储在另一个数组中:

到目前为止,这是我的代码:

<select name="genres[]" id="genres_edit" multiple>
<?php
$genrelist = array(  
'Action',  
'Adventure',
'Comedy',
'Cooking',
'War',
'Western');
for($i = 0;$i < count($genrelist);$i++) {
    echo "<option value=\"$genrelist[$i]\"";
    for ($g = 0; $g < count($genre);$g++) {
        if ($genrelist[$i] == $genre[$g]) {
            echo "selected=\"selected\"";
        }
    echo ">$genrelist[$i]</option>";
    }
}
?>
</select>

$genrelist 是将用于填充 select 控件的所有可能流派的数组,实际流派的数组存储在 $genre 中。

基本上我希望它突出显示 select 框中与 $genre 数组中的任何值匹配的值。

即如果存储在 $genres 中的类型是:Adventure、Cooking、Western,那么这 3 个值将在 select 框中突出显示,在框中的 6 个可用类型中。

这是我的做法...

$genres = array(
    'Action',
    'Western'
    );

$genrelist = array(
    'Action',  
    'Adventure',
    'Comedy',
    'Cooking',
    'War',
    'Western');

foreach ($genrelist as $k=>$v) {
    $sel = (array_search($v,$genres) !== false) ? ' selected' : '';
    echo '<option value="'. $k .'"'. $sel .'>'. $v .'</option>';
}

这是沙盒...http://sandbox.onlinephpfunctions.com/code/e4f2ca28e0fd43513b694f5669329cc1db328598

假设您的表单设置为 method="get" 那么 $_GET 超全局 应该 中有一个名为 genres 的数组(如定义由于您的多个 select 框被称为 genres[]).

因此,当循环输出时,您应该能够检查当前流派(来自 $genrelist 数组)是否存在于 $_GET['genres'] 数组中……像这样:

<?php
$genrelist = array(  
    'Action',
    'Adventure',
    'Comedy',
    'Cooking',
    'War',
    'Western');
?>

<select name="genres[]" id="genres_edit" multiple="multiple">
<?php foreach($genrelist as $genre): ?>
<?php $sThisSelected = in_array($genre, $_GET['genres']) ? " selected=\"selected\"" : ""; ?>
<option value=\"<?= $genre; ?>\"<?= $sThisSelected; ?>><?= $genre; ?></option>
<?php endforeach; ?>
</select>

这里没有健全性检查或消毒,但这就是理论。

如果您想要多个 selection,您必须使用 multiple 选项指定您的 select 标签

<select multiple="1">
  <option selected>option1</option>
  <option selected>option1</option>
  <option selected>option1</option>
</select>

缺点是 select 菜单不再是下拉菜单,如果这对您来说很重要,请告诉我,我会尝试调整解决方案。