оператор цикла foreach.Как сделать вариант предварительно выбранным - PullRequest
0 голосов
/ 21 февраля 2012

Я пытаюсь создать выпадающий список, используя оператор цикла 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 ]

1 голос
/ 21 февраля 2012
<form>
<select name ='test'>
<? foreach($availabloptions as $catvalue => $catname){ ?>
    <? $sel = ($catname == $availabloptions["gadgets"]) ? 'selected=selected' : ''; ?>
    <option value='<?=$catvalue?>' <?=$sel?>><?=$catname?></option>
    </select>
    </form>
<? } ?>
0 голосов
/ 21 февраля 2012

Я всегда предпочитал этот формат.

<?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.

0 голосов
/ 21 февраля 2012

Не злоупотребляйте эхом.Таким образом, вы можете воспользоваться возможностью 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>
0 голосов
/ 21 февраля 2012

Похоже, ваши кавычки не в том месте?Кроме того, помните, что в 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>";
...