有没有更快的方法来选择PHP中的HTML下拉列表的“选定”值?

I'm currently using this garbage code to select the correct selected="selected" value for my HTML dropdown. There has got to be a better way... maybe with a switch statement or something else?

Any tips on how to make this more efficient?

if ($quantity == 0)
{
    echo '
    <option selected="selected" value="0">0</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9+">9+</option>
    ';
}
else if ($quantity == 1)
{
    echo '
    <option value="0">0</option>
    <option selected="selected" value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9+">9+</option>
    ';
    }
else if ($quantity == 2)
{
    echo '
    <option value="0">0</option>
    <option value="1">1</option>
    <option selected="selected" value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9+">9+</option>
    ';
}
else if ($quantity == 3)
{
    echo '
    <option value="0">0</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option selected="selected" value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9+">9+</option>
    ';
}  etc....

This should work for you:

echo "<select>";
for($count = 0; $count < 10; $count++)
    echo "<option " . ($quantity == $count ? 'selected': '') . " value='$count'>$count</option>";
echo "</select>";

You could loop through them and print each one's HTML code, like this:

for($i=0;$i<10;$i++){
    $value=$i;
    if($value==9) $value="9+";
    if($i==$quantity){
        echo '<option value="' . $value . '" selected="selected">' . $value . '</option>'
    }
    else{
        echo '<option value="' . $value . '">' . $value . '</option>'
    }
}

loop over it:

for($i = 0; $i < 9; $i++){
    if($i == $quantity){
        $selected = 'selected="selected"';
    }else{
        $selected = '';
    }
    $i2 = ($i == 9) ? '9+' : $i;
    $select_options .= '<option value="'.$i2.'" '.$selected.'>'.$i2.'</option>';
}

echo $select_options;

Edit: looks like you can't set selected in the select its self, which is pretty stupid if you think about it. I've filed a complaint with the html5 standards people. its illogical to set the selected value of a select element in the individual options.

Using a loop is all you need :

$out='<option';
for($i=0;$i<10;i++){

if($quantity==$i)
$out.='selected="selected" ';

$out.=" value='$i'>$i</option";

echo $out;

}

I usually interpolate the 'selected' variable in to the loop

for($i=0;$i<10;$i++){
     $selected = $i==$quantity? 'selected="selected"':'';

        echo "<option value=\"$i\" $selected>$i</option>";

}