2014-03-19 84 views
1

我對選擇表單有疑問。我有一個包含從數據庫中提取的字符串的變量,並且我希望選擇表單首先優先,並使其成爲選擇表單的頂部。使選擇選項成爲首選

$smode = "fade"; 
<select name='smode'> 
     <?php 
     $modes = array('horizontal', 'vertical', 'fade'); 
     $i = 0; 
     while($i < 3){ 
      echo "<option value='$modes[$i]'>$modes[$i]</option>"; 
      $i++; 
     } 
      ?> 
    </select> 

所以,當變量$ SMODE是「變臉」,我想淡出選項字段在選擇表格的頂部,當變量$ SMODE是「垂直」我想在垂直選項場頂部等等。

希望有人能幫助我。謝謝。

+0

在選擇是否聲明=蘇氨酸添加「選擇」 –

+0

你怎麼知道哪一個應該選擇?此外,更改選擇選項的順序通常不會形成良好的用戶體驗。 – David

回答

2

這應該可以做到。只需將您的輸出存儲在變量中。 爲您的頂級定義一個,其餘的定義一個。 在循環之後,您只需使用echo按照所需的順序輸出它們。

$smode = "fade"; 
<select name='smode'> 
    <?php 
    $modes = array('horizontal', 'vertical', 'fade'); 
    $i = 0; 
    $options = ''; 
    $topOption= ''; 
    while($i < 3){ 
     if($modes[$i] == $smode) { 
     $topOption = "<option value='$modes[$i]' selected='selected'>$modes[$i]</option>" 
     } else { 
     $options .= "<option value='$modes[$i]'>$modes[$i]</option>"; 
     } 
     $i++; 
    } 
    echo $topOption . $options; 
?> 
</select> 

另外,請閱讀for循環。

$smode = "fade"; 
<select name='smode'> 
    <?php 
    $modes = array('horizontal', 'vertical', 'fade'); 
    $options = ''; 
    $topOption= ''; 
    for($i =0; $i < 3;$i++){ 
     if($modes[$i] == $smode) { 
     $topOption = "<option value='$modes[$i]' selected='selected'>$modes[$i]</option>" 
     } else { 
     $options .= "<option value='$modes[$i]'>$modes[$i]</option>"; 
     } 
    } 
    echo $topOption . $options; 
?> 
</select> 

甚至可以考慮foreach

$smode = "fade"; 
<select name='smode'> 
    <?php 
    $modes = array('horizontal', 'vertical', 'fade'); 
    $options = ''; 
    $topOption= ''; 
    foreach($modes as $modeItem){ 
     if($modeItem == $smode) { 
     $topOption = "<option value='$modeItem' selected='selected'>$modeItem</option>" 
     } else { 
     $options .= "<option value='$modeItem'>$modeItem</option>"; 
     } 
    } 
    echo $topOption . $options; 
?> 
</select> 
+1

我會改變'if($ modes [$ i] =='fade'){'to'if($ modes [$ i] == $ smode)'{' – martincarlin87

+1

@ martincarlin87 true。完成了! –

0

這也將是一個解決方案(沒有測試過,應該工作)

$smode = "vertical"; 

function cmp($a, $b) { 
    global $smode; 
    if ($b == $smode) { 
     return 1; 
    } 
    return 0; 
} 


$modes = array('horizontal', 'vertical', 'fade'); 
usort($modes, 'cmp'); 

print_r($modes); 
0

簡單從數組中刪除的主要項目,添加第1條,然後添加其餘部分

$smode = "fade"; 
echo "<select name='smode'>"; 

$modes = array('horizontal', 'vertical', 'fade'); 

//remove the primary item 
$fixedmodes=array_diff($modes, array($smode)); 
//add the primary select option 
echo "<option value='$smode'>$smode</option>"; 
//add the rest 
foreach ($fixedmodes as $val) { 
    echo "<option value='$val'>$val</option>"; 
} 
echo "</select>"; 
0

這個問題歸結爲數組操作。

$smode = "fade";  
$modes = array('horizontal', 'vertical', 'fade'); 
//remove the smode term from the array 
$modes = array_diff($modes, array($smode)); 
// ... and add it to the beginning 
array_unshift($modes, $smode); 

工作例如:https://eval.in/123063

0

您只需做到以下幾點:

$modes = array('horizontal', 'vertical', 'fade'); 

$modes = array_diff($modes, array($smode));// create a new array without the top option 

array_unshift($modes, $smode);//add the option to first position 

//carry on...