foreach循环语句。如何预选一个选项

时间:2012-02-20 23:30:14

标签: php loops foreach option selected

我正在尝试使用数组上的foreach循环语句创建一个下拉列表,除了代码的选定部分不起作用。有谁能解释为什么?谢谢。

$availabloptions = array("apparel"=>"Apparel", "gadgets"=>"Gadgets", "sports"=>"Sports", "travel"=>"Travel");

echo"<form>";
echo"<select name ='test'>";
foreach($availabloptions as $catvalue=>$catname){
echo"<option value='".$catvalue."'(".$catname." == ".$availabloptions["gadgets"].") ? selected   ='selected':''>".$catname."</option>";}
echo"</select>";
echo"</form>"

4 个答案:

答案 0 :(得分:1)

<form>
<select name ='test'>
<? foreach($availabloptions as $catvalue => $catname){ ?>
    <? $sel = ($catname == $availabloptions["gadgets"]) ? 'selected=selected' : ''; ?>
    <option value='<?=$catvalue?>' <?=$sel?>><?=$catname?></option>
    </select>
    </form>
<? } ?>

答案 1 :(得分:0)

看起来您的引号位于错误的位置?另外,请记住,在PHP中,您可以直接引用变量(但不能评估其中的代码,例如(condition ? value1 : value2);必须在外部进行引号):

echo "<option value='$catvalue'" .   
 // the (condition ? "selected='selected'" : '') is part of 
 // the code not of the string
 ($catname == $availabloptions["gadgets"] ? " selected='selected'":"") .
 ">$catname</option>";

答案 2 :(得分:0)

不要过度使用回声。这样您就可以从IDE检查HTML语法的能力中受益,并且您将使代码更具可读性(=更不容易出错)。

<?php
$availabloptions = array("apparel" => "Apparel", "gadgets" => "Gadgets", "sports" => "Sports", "travel" => "Travel");
?>
<form>
<select name="test">
<?php foreach ($availabloptions as $catvalue => $catname) { ?>
    <option value="<?=$catvalue?>"<?=$catname == $availabloptions["gadgets"] ? ' selected="selected"' : ''?>><?=$catname?></option>
<?php } ?>
</select>
</form>

答案 3 :(得分:0)

我一直都喜欢这种格式。

<?php

$availabloptions = array(
  "apparel"=>"Apparel",
  "gadgets"=>"Gadgets",
  "sports"=>"Sports",
  "travel"=>"Travel"
);

$selected=array();

$selected["gadgets"]=" selected";

?>
<form>
  <select name='test'>
<?
    foreach ($availableoptions as $key => $value) {
      printf("\t<option value='%s'%s>%s</option>\n", $key, $selected[$key], $value);
    }
?>
  </select>
</form>

如果您收到关于$ selected [$ key]不存在的恼人警告,您应该可以使用@printf来阻止它们。