2013-08-13 1 views
2

Мне часто приходится делать option из выпадающего списка select динамически, например, уточняя поиск, который должен отображать ранее выбранные значения. Я обычно идут через варианты (в цикле, если получение из БД), а также проверить с if statement:HTML выбирается динамически, кроме операторов if

$selected = 'Option 2'; 
foreach ($options as $value) { 
    echo '<option '; 
    echo ($selected == $value)? 'selected>' : '>'; 
    echo $value . '</option>'; 
} 

Сейчас это достаточно хлопот, чтобы сделать это для каждого комбинированного окна, и это несколько строк код. Есть ли более быстрый/более эффективный способ выбора опции на основе заданного значения. Например, что-то вроде «Сделать $selected вариант выбран», а не запускать оператор if для каждой отдельной опции?

+1

Вы можете использовать jquery для выбора значений при загрузке страницы. –

+0

это право. Я использую это на другой странице. Думаю, я должен это сделать – mavili

+0

Большинство инструментов, которые упрощают этот процесс, выполняют цикл, аналогичный тому, который вы используете под ним. Трудная часть - это создание абстракции, которая подходит для всех возможных применений. – Flosculus

ответ

1

Все, что вы хотите, это то, что вы делаете, но что-то, что можно использовать повторно.

<?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 действительно не имеет никакого отношения к тому, как вы можете это сделать.

0

Попробуйте как

$selected = 'Option 2';  
foreach ($options as $Value) { 
    if($Value != $selected) { 
     echo "<option>" . $Value . "</option>"; 
    } else { 
     echo "<option selected>" . $Value . "</option>"; 
    } 
} 
+0

Что делать, если значение IS выбрано? Оператор if не обрабатывает эти – mavili

+0

Попробуйте изменить также – Gautam3164

0

Нет, если() случае!

$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"; 
    } 
+0

@mavili no if() case! – Bere