2016-02-12 131 views
1

我有3个选项菜单,在最简单的形式如下:动态选择下拉菜单

<form action="samePageAction" form="post"> 
    <select> 
    <option>Yes</option> 
    <option>No</option> 
    <option>Maybe</option> 
    </select> 
</form> 

,它只是根据用户的数据库中设置这是不是真的“动态”,我选择什么“选项”默认显示:在每种情况下

<form action="samePageAction" form="post"> 
     <select> 
<?  
     if(!$personUndecided && $personHasAgreed){ 
?> 
     <option>Yes</option> 
     <option>No</option> 
     <option>Maybe</option> 
<?  
     } else if(!$personUndecided && !$personHasAgreed){ 
?> 
     <option>No</option> 
     <option>Yes</option> 
     <option>Maybe</option> 
     </select> 
<? 
     else { 
?> 
     <option>Maybe</option> 
     <option>Yes</option> 
     <option>No</option> 
    </select> 
<? } ?> 
    </form> 

“第一”的选择是很重要的,因为当表单被禁用,这是用户将看到的选项。当我看到这件事情时,我感到非常痛苦,但更好的解决方案不会来到我身上。我怎样才能优化这个菜单?

问题:如何防止重复自己这么多。或者这段代码看起来完全正常吗?

+1

什么,你居然找? *问题不清楚,亲爱的* –

+1

@bruh请注意,'else'语句永远不会执行 – fusion3k

+0

Thanks @ fusion3k,已修复。 – bruh

回答

1

您可以短代码以这种方式,即:

<?php 
    if($personHasAgreed)  $choices = array ('Yes', 'No', 'Maybe'); 
    elseif(!$personHasAgreed) $choices = array ('No', 'Yes', 'Maybe'); 
    else      $choices = array ('Maybe','Yes', 'No'); 

    foreach($choices as $choice): 
?> 
     <option><?php echo $choice; ?></option> 
<?php endforeach; ?> 

这样,你先分配取决于$personHasAgreed设置的各种选择的值,然后执行一个foreach环路输出的每个选项。

编辑:请注意,我认为else语句将永远不会被执行...

+0

你太棒了! – bruh

+0

关于else块,还有另外一个条件(我没有提到),例如'$ personUndecided = true && $ personH​​asAgreed' ....只会遇到第三种情况,因为前两个将是错误的。感谢您指出,虽然! – bruh

1

explode功能简单的解决方案:

<form action="samePageAction" form="post"> 
    <select> 
<?php 
    $personHasAgreed = ""; 
    $valueString = ($personHasAgreed === 1)? "Yes,No,Maybe" : (($personHasAgreed === 0)? "No,Yes,Maybe" : "Maybe,Yes,No"); 
    $valueString = explode(",", $valueString); 
    foreach($valueString as $word){ 
     echo "<option>". $word ."<option>"; 
    } 
?>  
     </select> 
    </form> 
+0

我也喜欢这个。谢谢!这真的很好 – bruh

+0

@bruh,不客气 – RomanPerekhrest

0

像这样的事情?

<form action="samePageAction" method="post"> 
    <select> 
<?php 
$possAnswer = array(
    "1" => "<option>Yes</option>", 
    "0" => "<option>No</option>", 
    "2" => "<option>Maybe</option>" 
    ); 
if($personHasAgreed) { 
    echo $possAnswer[1] . $possAnswer[0] . $possAnswer[2]; 
} else if(!$personHasAgreed){ 
    echo $possAnswer[0] . $possAnswer[1] . $possAnswer[2]; 
} else { 
    echo $possAnswer[2] . $possAnswer[1] . $possAnswer[0]; 
} 
?> 
    </select> 
</form> 

`