如何使用 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>