如何使用 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 菜单不再是下拉菜单,如果这对您来说很重要,请告诉我,我会尝试调整解决方案。
这是这里解决的问题的扩展: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 菜单不再是下拉菜单,如果这对您来说很重要,请告诉我,我会尝试调整解决方案。