处理PHP和HTML <option> logic </option>的更好解决方案

时间:2013-10-07 19:16:32

标签: php html

想知道你是否可以告诉我一个更好的方法来处理这个逻辑?我写了这篇文章并为此感到非常惭愧。你能告诉我这个逻辑的更优化版本吗?

P.S $ result [“item”];返回一个整数。

$type = $result["item"];
switch ($type){
case "1":
$type_output = '    
<option value="1" selected>Cash</option>
<option value="2">Cheque</option>
<option value="3">Debit Card</option>
<option value="4">Credit Card</option>';
break;

case "2":
$type_output = '    
<option value="1">Cash</option>
<option value="2" selected>Cheque</option>
<option value="3">Debit Card</option>
<option value="4">Credit Card</option>';
break;

case "3":
$type_output = '    
<option value="1">Cash</option>
<option value="2">Cheque</option>
<option value="3" selected>Debit Card</option>
<option value="4">Credit Card</option>';
break;

case "4":
$type_output = '    
<option value="1">Cash</option>
<option value="2">Cheque</option>
<option value="3">Debit Card</option>
<option value="4" selected>Credit Card</option>';
break;
}

HTML

<td>
<select style="width:200px;" name="payment_type">
<option value=""> </option>
'.$type_output.'
</select>
</td>

谢谢

8 个答案:

答案 0 :(得分:6)

我会用这种方法

$type = $result["item"];
$type_output = "";

$options =array(
    "1"=>"cash",
    "2"=>"Cheque",
    "3"=>"Debit Card",
    "4"=>"Credit Card",
);

foreach($options as $value=>$text) {
    $type_output .= "<option value=\"$value\"".($type==$value? " selected" : "").">$text</option>\n";
}

答案 1 :(得分:3)

你可以这样做,只有一次

<option value="1" <?php if ($type == 1) echo "selected"; ?>>Cash</option>
<option value="2" <?php if ($type == 2) echo "selected"; ?>>Cheque</option>
<option value="3" <?php if ($type == 3) echo "selected"; ?>>Debit Card</option>
<option value="4" <?php if ($type == 4) echo "selected"; ?>>Credit Card</option>

答案 2 :(得分:1)

你在这里重复很多事情。你可以做点什么

<option value="..." <?php if($type == 1) { print "selected"; } ?> >Something</option>

这样可行,但是你可能最好使用模板引擎并让它为你处理这类东西。

http://www.smarty.net/docsv2/en/language.function.html.options.tpl

答案 3 :(得分:1)

在您的文档中尝试此操作:

<option value="1" <?php if ($type == 1) echo 'selected="selected"' ?>>Cash</option>
<option value="2" <?php if ($type == 2) echo 'selected="selected"' ?>>Cheque</option>
<option value="3" <?php if ($type == 3) echo 'selected="selected"' ?>>Debit Card</option>
<option value="4" <?php if ($type == 4) echo 'selected="selected"' ?>>Credit Card</option>'

请记住,selected本身是无效的,至少在XHTML中是这样。您可以在HTML5中使用它,但就我个人而言,我会正确地执行它,如上所述。无论哪种方式,请确保根据W3C验证器检查HTML输出。

另外,我倾向于不像你所做的那样在PHP字符串中包装大块的HTML;最好使用HTML模式并进入需要动态输出的PHP。这使您的IDE可以理解文档的结构,并允许语法着色和自动完成工作。

答案 4 :(得分:1)

试试这个

type_output = '
<option value="1"'.($type == 1 ? " selected" : "").'>Cash</option>
<option value="2"'.($type == 2 ? " selected" : "").'>Cheque</option>
<option value="3"'.($type == 3 ? " selected" : "").'>Debit Card</option>
<option value="4"'.($type == 4 ? " selected" : "").'>Credit Card</option>';

答案 5 :(得分:0)

你可以使用这样的函数:

function selected($selected, $current) {
    if($selected == $current)
        return "selected";
}

然后:

$options = array(
    1 => 'Cash',
    2 => 'Cheque',
    3 => 'Debit Card',
    4 => 'Credit Card'
);
foreach($options as $value => $option)
    echo '<option value="'.$value.'" '.selected($value, $type).'>'.$option.'</option>';

请注意,selected功能也适用于其他类似情况。

答案 6 :(得分:0)

惭)))

sel = document.getElementById("select_id");
if($type>=0&&$type<sel.options.length)
sel.options[$type].selected=true;

在onLoad或更好的onDomReady上执行...或者在选项代码之后执行。不要忘记分配一个id:

<select id="select_id">...

如果您正在控制输入,那么它将是 JUST ONE LINE 的JS:

document.getElementById("select_id").options[$type].selected=true;

答案 7 :(得分:0)

我是这样做的。

$options = array(
"1"=>"Cash",
"2"=>"Cheque",
"3"=>"Debit Card",
"4"=>"Credit Card"
);
$type = $result['item'];
$type_output = "";

foreach($options as $value=>$text) {
    if($value==$type){
        $selected = " selected";
    }
    else {
        $selected = "";
    }
    $type_output .= '<option value="'.$value.'"'.$selected.'>'.$text.'</option>';
}

刚刚注意到Chumkiu有一个类似的答案,但我会发布我的,以防万一这个人比三元if语句更清楚