使选择选项成为最佳选项

时间:2014-03-19 13:13:35

标签: php html

我对选择表格有疑问。我有一个包含从数据库中提取的字符串的变量,我希望select表单首先优先,并使其成为select表单的顶部。

$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是&#34; fade&#34;时,我想要在选择表单顶部的淡入淡出选项字段,当变量$ smode是&#34; vertical&#34;我希望顶部的垂直选项字段,依此类推。

希望有人可以帮助我。感谢。

5 个答案:

答案 0 :(得分: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 :(得分: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);

答案 2 :(得分:0)

简单地从数组中删除主要项目,将其添加到第一个,而不是添加其余的

$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>";

答案 3 :(得分: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

答案 4 :(得分: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...