我正在尝试使用PHP基于mysql数据库中存储的内容动态生成html select options

存储名为sizez的数据的列。

该列中的数据的存储方式如下:

small,large,xlarge,xxlarge


因此,基本上,数据用逗号分隔。

现在在我的php页面中,我只需拉出数据,并使用while loop为存储在mysql数据库中的每个产品将其显示在页面上。

我遇到的问题是,我需要根据每个项目的sizez列生成一个选择选项下拉列表。

为此,我正在使用explode()函数,它也会成功生成select选项。

但是,问题在于它只会从第一列sizez列中获取字符串,而忽略其余项,但是它也会为第一列显示其他项目中的字符串,并重复它们!

这是我的代码:

    while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){
             $id = $row["id"];
             $sizez = $row["sizez"];
             $sizez = preg_replace('/\.$/', '', $sizez); //Remove dot at end if exists
             $array = explode(',', $sizez); //split string into array seperated by ','
             foreach($array as $value) //loop over values
             {
                 //echo $value . PHP_EOL; //print value
                 $sizesOption .='<option>'.$value.'</option>';
              }

$all_list .="<select>
         '.$sizesOption.'
         </select>";


所以我想将foreach($array as $value)放在$all_list .=内,但是这种方法是错误的。

有人可以建议这个问题吗?

任何帮助,将不胜感激。

编辑:

预期结果应如下所示:

item one              item two                 item three
small                 large                    small
large                 xxlarge                  xxlarge


但是,使用我的代码,我得到的结果是这样的:

item one              item two                 item three
small                 small                    small
large                 large                    large
                      small                    small
                      large                    large
                                               small
                                               large


因此,基本上,它会从第一项中获取“尺寸”列,并将在其他项目的选择选项内重复进行,就像上面的示例一样。

最佳答案

由于您要为每次迭代生成单独的<select>,因此必须重置$sizeOptions。我建议使用数组,而不只是连接字符串:

$allList = array();

while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){
    $sizesOption = array();
    $sizez = preg_replace('/\.$/', '', $row["sizez"]);

    $array = explode(',', $sizez);

    foreach ($array as $value) {
        $sizesOption[] = "<option>{$value}</option>";
    }

    $all_list[] = '<select>'.implode("\r\n", $sizesOption).'</select>';
}

echo implode("\r\n", $allList);

07-24 17:57