各行をループし、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 で次のようにレンダリングされる選択が作成されます (私は赤と大を選択しました)。