1

オプションとなる 1 つの列と、そのオプションのオプション値を表す別の列を持つデータベース テーブルがあります。例:

Options:   Option Values
Color   -  Red
Color   -  Blue
Size    -  Large
Size    -  Small

オプションが次のようにグループ化されている選択ボックスに入力できる場所までデータをループするにはどうすればよいですか。

Color:
     Red
     Blue

Size:
     Large
     Small

前もって感謝します!

4

2 に答える 2

0

各行をループし、PHP の [] 配列演算子とオプション名を多次元配列のキーとして使用します。

foreach($yourRows as $data) {
  if (!isset($options[$data['option']])) {
    $options[$data['option']] = array();
  }
  $options[$data['option']][] = $data['value'];
}

これにより、2 次元配列が作成されます。最初のレベルは連想で、オプション名をキーとしており、これらの各キーには、そのオプションの値の数値インデックス配列が含まれています。

結果の配列は、次のように作成されたように見えます。

$options = array(
  "color" => array("red", "blue"),
  "size"  => array("small", "large")
);

次に、必要に応じてオプションを次のように繰り返します。

echo '<select name="options"  multiple="multiple">';
foreach($options as $option_type => $available_options) {
  printf('<optgroup label="%s">', $option_type);
  foreach($available_options as $avail) 
    printf('<option value="%s">%s</option>', $avail, $avail);
  echo '</optgroup>';
} 
echo '</select>';

これにより、Safari で次のようにレンダリングされる選択が作成されます (私は赤と大を選択しました)。

ここに画像の説明を入力

于 2012-07-05T22:11:29.157 に答える
0

<select>それぞれのボックスを表示したい場合は、次のようにします:-

ORDER BY 'Options'(データベースに応じて確実または類似しています)

$previous_option = "";
$count = 0;
foreach($data as $row){
    if($row['options'] != $previous_option){
        if($count>0){
            echo '</select>'.$row['options'].': <select name="'.$row['options'].'">';
        } else {
            echo $row['options'].': <select name="'.$row['options'].'">';
        }
    }
    echo '<option>'.$row['value'].'</option>';
    $count++;
    $previous_option = $row['options'];
}
  • $data= データベースの結果。
  • $row['options']= データベース列「オプション」。
  • $row['value']= データベース列 'オプション値'
  • $previous_option= オプション「グループ化」に使用
  • $count= 最初の反復の追跡に使用
于 2012-07-05T23:24:25.543 に答える