如何使用 PHP 将多个选项或具有不同值的数组中的选项设置为 select 在 select 框中编辑的视图
How to set an option from multiple options or array with different values to views as selected in select box using PHP
选项值取自数据库并与其他选项一起包含在 select 框中。如何将从数据库中获取的值设置为 selected?
数据库中的值设置为 $row['value'] 并等于 s。在 HTML 中,选项看起来像这样...
<select name="select">
<option value='xxs'>Extra, Extra small</option>
<option value='xs'>Extra small</option>
<option value='s'>Small</option>
<option value='m'>Medium</option>
<option value='l'>Large</option>
<option value='xl'>Extra Large</option>
<option value='xxl'>Extra, Extra small</option>
</select>
我想要的是在页面加载时显示的 $row['value'](小)选项...这可能吗?
好消息是,这是可能的,而且在 PHP 中真的很简单。首先,我们将所有选项及其各自的值放在一个数组中,如下所示:
<?php
$options=array('Extra, Extra small'=>'xxs','Extra small'=>'xs','Small'=>'s','Medium'=>'m','Large'=>'l','Extra Large'=>'xl','Extra, Extra Large'=>'xxl');
通过打开 select 框并在 foreach 循环中调用选项数组来执行此操作...
echo '<select>';
foreach($options as $view=>$value){
您可能已经注意到,该数组包含看起来像 'Large'=>'l' 的字段,并且 for each 循环调用 $view=>$value 的选项。 $view 表示名称字段,在本例中为 'Large',$value 表示值字段 'l'。如果您希望用户在 select 框中看到与设置的值不同的选项,这一点很重要。
接下来我们创建变量 $selected,它将用于确定 $row['value'] 和 $value...[=16= 之间是否匹配]
$selected=($row['value'] == $value)? "selected" : "";
这与使用 if 和 else 语句设置变量相同,但更短。变量后的第一部分询问 $row['value'] 是否等于 $value,如果等于 $selected="selected" else (:) $selected 设置为空白。
接下来我们包括选项。因为在foreach循环中,我们只需要一行就可以插入所有的选项...
echo '<option '.$selected.' value="'.$value.'">'.$view.'</option>';
还记得上一步中的 $selected 变量吗?每次 foreach 循环遍历开头设置的选项数组的一部分时,它都会检查 $row['value'] 是否等于 $value。如果是这样,那么 $selected 将被设置为 selected 并且该特定选项将是页面加载时显示的选项。它继续遍历数组的其余部分,直到扫描完所有视图和值并returns它们各自的选项。
最后我们关闭 foreach 循环和 select 框...
}
echo '</select>';
现在你已经有了它,一种将 select 框选项设置为 selected 的自动方法。类似的模式可用于复选框、单选按钮 select 或选项卡等。
完整代码...
<?php
$options=array('Extra, Extra small'=>'xxs','Extra small'=>'xs','Small'=>'s','Medium'=>'m','Large'=>'l','Extra Large'=>'xl','Extra, Extra Large'=>'xxl');
echo '<select>';
foreach($options as $view=>$value){
$selected=($row['value'] == $value)? "selected" : "";
echo '<option '.$selected.' value="'.$value.'">'.$view.'</option>';
}
echo '</select>';
给定此数组,此值为 selected 值...
$options = array(
'Extra, Extra small' => 'xxs',
'Extra small' => 'xs',
'Small' => 's',
'Medium' => 'm',
'Large' => 'l',
'Extra Large' => 'xl',
'Extra, Extra Large' => 'xxl'
);
$selected = 'm'; // $selected can be swapped for $row['value'] as in the OP
有几种方法可以在 <select>
中动态构建选项标签并在其中之一上设置 selected
属性。
首先是 foreach 循环中的一行代码:
echo "<select name=\"select\">";
foreach($options as $text=>$value){
echo "<option value=\"$value\"" , ($selected == $value ? " selected" : "") , ">$text</option>";
}
echo "</select>";
此代码块使用 ternary conditional operator
又名 conditional operator
又名 shorthand if/else
又名 inline conditon
。转到 here 进一步阅读和示例。
通过使用双引号 "
,您可以避免在文字字符串和变量之间来回切换。 *您必须通过在 \
前面加上嵌套在字符串内的双引号来转义。 *变量可以用大括号括起来,以将其变量名与环绕文本隔离开来。 *单引号不会回显变量的值。)继续阅读有关引用的内容:reference
通过使用 ,
(逗号)而不是 .
(点)来连接字符串,可以提高性能。 one benchmark
通过仅在 true
条件中的 selected
属性之前添加 space(相对于每次迭代都在条件外添加 space ),您可以避免在标签内创建不必要的 space。
通过使用内联条件语句,您可以避免在全局范围内不必要地声明变量。如果将 selected
字符串声明为变量,如 @independent.guru 所做的那样,它将是 declared/overwritten 并且在每次迭代中仅使用一次;这只会降低性能。
每个程序员对 "readability"、"brevity"、"consistency" 和 "performance" 都有自己的偏好,并且可以选择使用任何方式构建他们的 html上述技术的混合。
一般来说,我不会费心去声明一个我只会使用一次的变量。在我个人的偏好层次结构中,简洁、一致性和性能总是在之前可读性.
上面的一些点可能看起来像是微优化,但对于一个规范的问题,包括对性能的讨论是合理的,因为任何列出的方法都可以直接复制粘贴到项目中。
如果第一个代码块太紧凑,这里有两个其他版本,将方法分散到多行而不生成任何额外变量:
分隔 shorthand if/else 语法:
echo "<select name=\"select\">";
foreach($options as $text => $value){
echo "<option value=\"$value\"";
echo $selected == $value ? " selected" : "";
echo ">$text</option>";
}
echo "</select>";
有条件的标准:
echo "<select name=\"select\">";
foreach($options as $text => $value){
echo "<option value=\"$value\"";
if($selected == $value){
echo " selected";
}
echo ">$text</option>";
}
echo "</select>";
以上所有相同方法的版本都将创建此呈现 html:
页面加载时:
当 select 元素打开时:
源代码如下所示:
<select name="select"><option value="xxs">Extra, Extra small</option><option value="xs">Extra small</option><option value="s">Small</option><option value="m" selected>Medium</option><option value="l">Large</option><option value="xl">Extra Large</option><option value="xxl">Extra, Extra Large</option></select>
这是为了便于阅读而标出的源代码:
<select name="select">
<option value="xxs">Extra, Extra small</option>
<option value="xs">Extra small</option>
<option value="s">Small</option>
<option value="m" selected>Medium</option>
<option value="l">Large</option>
<option value="xl">Extra Large</option>
<option value="xxl">Extra, Extra Large</option>
</select>
选项值取自数据库并与其他选项一起包含在 select 框中。如何将从数据库中获取的值设置为 selected?
数据库中的值设置为 $row['value'] 并等于 s。在 HTML 中,选项看起来像这样...
<select name="select">
<option value='xxs'>Extra, Extra small</option>
<option value='xs'>Extra small</option>
<option value='s'>Small</option>
<option value='m'>Medium</option>
<option value='l'>Large</option>
<option value='xl'>Extra Large</option>
<option value='xxl'>Extra, Extra small</option>
</select>
我想要的是在页面加载时显示的 $row['value'](小)选项...这可能吗?
好消息是,这是可能的,而且在 PHP 中真的很简单。首先,我们将所有选项及其各自的值放在一个数组中,如下所示:
<?php
$options=array('Extra, Extra small'=>'xxs','Extra small'=>'xs','Small'=>'s','Medium'=>'m','Large'=>'l','Extra Large'=>'xl','Extra, Extra Large'=>'xxl');
通过打开 select 框并在 foreach 循环中调用选项数组来执行此操作...
echo '<select>';
foreach($options as $view=>$value){
您可能已经注意到,该数组包含看起来像 'Large'=>'l' 的字段,并且 for each 循环调用 $view=>$value 的选项。 $view 表示名称字段,在本例中为 'Large',$value 表示值字段 'l'。如果您希望用户在 select 框中看到与设置的值不同的选项,这一点很重要。
接下来我们创建变量 $selected,它将用于确定 $row['value'] 和 $value...[=16= 之间是否匹配]
$selected=($row['value'] == $value)? "selected" : "";
这与使用 if 和 else 语句设置变量相同,但更短。变量后的第一部分询问 $row['value'] 是否等于 $value,如果等于 $selected="selected" else (:) $selected 设置为空白。
接下来我们包括选项。因为在foreach循环中,我们只需要一行就可以插入所有的选项...
echo '<option '.$selected.' value="'.$value.'">'.$view.'</option>';
还记得上一步中的 $selected 变量吗?每次 foreach 循环遍历开头设置的选项数组的一部分时,它都会检查 $row['value'] 是否等于 $value。如果是这样,那么 $selected 将被设置为 selected 并且该特定选项将是页面加载时显示的选项。它继续遍历数组的其余部分,直到扫描完所有视图和值并returns它们各自的选项。
最后我们关闭 foreach 循环和 select 框...
}
echo '</select>';
现在你已经有了它,一种将 select 框选项设置为 selected 的自动方法。类似的模式可用于复选框、单选按钮 select 或选项卡等。
完整代码...
<?php
$options=array('Extra, Extra small'=>'xxs','Extra small'=>'xs','Small'=>'s','Medium'=>'m','Large'=>'l','Extra Large'=>'xl','Extra, Extra Large'=>'xxl');
echo '<select>';
foreach($options as $view=>$value){
$selected=($row['value'] == $value)? "selected" : "";
echo '<option '.$selected.' value="'.$value.'">'.$view.'</option>';
}
echo '</select>';
给定此数组,此值为 selected 值...
$options = array(
'Extra, Extra small' => 'xxs',
'Extra small' => 'xs',
'Small' => 's',
'Medium' => 'm',
'Large' => 'l',
'Extra Large' => 'xl',
'Extra, Extra Large' => 'xxl'
);
$selected = 'm'; // $selected can be swapped for $row['value'] as in the OP
有几种方法可以在 <select>
中动态构建选项标签并在其中之一上设置 selected
属性。
首先是 foreach 循环中的一行代码:
echo "<select name=\"select\">";
foreach($options as $text=>$value){
echo "<option value=\"$value\"" , ($selected == $value ? " selected" : "") , ">$text</option>";
}
echo "</select>";
此代码块使用 ternary conditional operator
又名 conditional operator
又名 shorthand if/else
又名 inline conditon
。转到 here 进一步阅读和示例。
通过使用双引号
"
,您可以避免在文字字符串和变量之间来回切换。 *您必须通过在\
前面加上嵌套在字符串内的双引号来转义。 *变量可以用大括号括起来,以将其变量名与环绕文本隔离开来。 *单引号不会回显变量的值。)继续阅读有关引用的内容:reference通过使用
,
(逗号)而不是.
(点)来连接字符串,可以提高性能。 one benchmark通过仅在
true
条件中的selected
属性之前添加 space(相对于每次迭代都在条件外添加 space ),您可以避免在标签内创建不必要的 space。通过使用内联条件语句,您可以避免在全局范围内不必要地声明变量。如果将
selected
字符串声明为变量,如 @independent.guru 所做的那样,它将是 declared/overwritten 并且在每次迭代中仅使用一次;这只会降低性能。
每个程序员对 "readability"、"brevity"、"consistency" 和 "performance" 都有自己的偏好,并且可以选择使用任何方式构建他们的 html上述技术的混合。
一般来说,我不会费心去声明一个我只会使用一次的变量。在我个人的偏好层次结构中,简洁、一致性和性能总是在之前可读性.
上面的一些点可能看起来像是微优化,但对于一个规范的问题,包括对性能的讨论是合理的,因为任何列出的方法都可以直接复制粘贴到项目中。
如果第一个代码块太紧凑,这里有两个其他版本,将方法分散到多行而不生成任何额外变量:
分隔 shorthand if/else 语法:
echo "<select name=\"select\">";
foreach($options as $text => $value){
echo "<option value=\"$value\"";
echo $selected == $value ? " selected" : "";
echo ">$text</option>";
}
echo "</select>";
有条件的标准:
echo "<select name=\"select\">";
foreach($options as $text => $value){
echo "<option value=\"$value\"";
if($selected == $value){
echo " selected";
}
echo ">$text</option>";
}
echo "</select>";
以上所有相同方法的版本都将创建此呈现 html:
页面加载时:
当 select 元素打开时:
源代码如下所示:
<select name="select"><option value="xxs">Extra, Extra small</option><option value="xs">Extra small</option><option value="s">Small</option><option value="m" selected>Medium</option><option value="l">Large</option><option value="xl">Extra Large</option><option value="xxl">Extra, Extra Large</option></select>
这是为了便于阅读而标出的源代码:
<select name="select">
<option value="xxs">Extra, Extra small</option>
<option value="xs">Extra small</option>
<option value="s">Small</option>
<option value="m" selected>Medium</option>
<option value="l">Large</option>
<option value="xl">Extra Large</option>
<option value="xxl">Extra, Extra Large</option>
</select>