HTML动态选择,而不是if语句


HTML select dynamically, other than if statements

我经常需要动态选择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";
    }