3

このロジックを処理するためのより良い方法を教えていただけないでしょうか? 私はこれを書いて、とても恥ずかしいです。このロジックのより最適化されたバージョンを教えてもらえますか?

PS $結果["項目"]; 整数を返します。

$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>

ありがとうございました

4

8 に答える 8

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";
}
于 2013-10-07T19:21:46.117 に答える
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>
于 2013-10-07T19:19:54.203 に答える
1

あなたはここで多くのことを繰り返しています。次のようなことができます

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

これは機能しますが、おそらくテンプレート エンジンを使用して、この種のものを処理させたほうがよいでしょう。

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

于 2013-10-07T19:20:19.017 に答える
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 ではうまくいくかもしれませんが、個人的には上記のように適切に実行します。いずれにせよ、HTML 出力を W3C バリデーターと照らし合わせて確認してください。

また、あなたが行ったように、HTML の大きなブロックを PHP 文字列でラップしない傾向があります。動的出力が必要な場合は、HTML モードを使用して PHP に侵入することをお勧めします。これにより、IDE がドキュメントの構造を理解できるようになり、構文の配色とオートコンプリートが機能するようになります。

于 2013-10-07T19:20:44.173 に答える
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>';
于 2013-10-07T19:22:12.637 に答える
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関数は、他の同様のケースにも適用できることに注意してください。

于 2013-10-07T19:20:54.830 に答える
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ステートメントよりも一部の人々にとって明確である場合に備えて、とにかく投稿します

于 2013-10-07T19:32:54.760 に答える