我经常需要动态选择select
组合框的option
,就像优化需要显示以前选择的值的搜索一样。我通常会浏览这些选项(如果从DB中获取,则在for循环中),并使用if statement
:进行检查
$selected = 'Option 2';
foreach ($options as $value) {
echo '<option ';
echo ($selected == $value)? 'selected>' : '>';
echo $value . '</option>';
}
现在,对于每个组合框来说,这样做都很麻烦,而且需要更多的代码行。有没有更快/更有效的方法可以根据给定的值选择选项。例如,类似于"选择$selected
选项",而不是为每个选项运行if语句?
你想要的只是一些可以做你正在做的事情的东西,但一些可以重复使用的东西。
<?php
$options = array(
'1' => 'Value 1',
'2' => 'Value 2',
'3' => 'Value 3',
'4' => 'Value 4'
);
function generate_html_options($source, $selected = null) {
foreach($source as $value => $string) {
$attribute = $value == $selected ? 'selected="selected"' : '';
echo sprintf('<option value="%s" %s>%s</option>', $value, $attribute, $string);
}
}
?>
<select>
<?php generate_html_options($options, 2); ?>
</select>
如果优雅是你想要的,那么PHP真的没有尽头
像一样尝试
$selected = 'Option 2';
foreach ($options as $Value) {
if($Value != $selected) {
echo "<option>" . $Value . "</option>";
} else {
echo "<option selected>" . $Value . "</option>";
}
}
没有if()情况!
$selected = 'Option 2';
$options = array('Option 1','Option 2','Option 3');
$str = "> ".implode($options,",> ");
$replaced_str = str_replace("> ".$selected, " selected='selected' >".$selected,$str);
$new_options = explode(',',$replaced_str);
foreach ($new_options as $value) {
echo '<option'.$value.'</option>'."'n";
}