我正在尝试使用数组上的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>"
答案 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
来阻止它们。