我正在尝试使用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);