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'];
}

这将创建一个二维数组,其中第一级是关联的,以选项名称为键,每个键都包含该选项值的数字索引数组。

结果数组看起来是这样创建的:

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