PHP:foreach循环里面的PHP变量?
我想动态生成html select options
使用PHP的基础上,无论其存储在MySQL数据库。PHP:foreach循环里面的PHP变量?
存储名为sizez
的数据的列。
在该列中的数据被存储,像这样:
small,large,xlarge,xxlarge
所以基本上数据由逗号分隔。
现在在我的php页面我只需将数据拖动到我的页面上,并使用while loop
对存储在mysql数据库中的每个产品进行显示。
我遇到的问题是我需要根据每个项目的sizez
列生成选择选项下拉列表。
因为我使用的是explode()
函数,它也会成功生成选择选项。
但是,问题是它只会从第一个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>";
,所以我认为把$all_list .=
内foreach($array as $value)
但这种方法是错误的。
可能有人请告知这个问题?
任何帮助,将不胜感激。
编辑:
预期的结果应该是这样的:
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);
谢谢你队友。你的答案的一部分帮助我解决了这个问题,并发布了我自己的答案。 – TERO 2015-03-02 15:40:01
从您发布的内容看来,您在while循环的每次迭代中都会重新生成$ all_list。
所以,如果你在while循环外面附加$ all_list,它将只有最后一个迭代可用 - 所有其他的迭代在while循环的过程中被覆盖。
关闭开括号为while循环之前 '$ all_list =“' statement.You的迭代while循环语句
`
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>";
`
可能,这将工作
我想它了。感谢Justinas的回答。我意识到我必须把我的php变量放在while循环中。
所以我所要做的就是把$sizesOption =array();
放在我的while循环中,现在一切正常。
P.S.我还没有对上面的代码做过任何其他更改。
因此,如果他们重复,预期的结果是什么?添加一些关于你期望得到的数据。 – Pinx0 2015-03-02 14:59:44
不要在一个字段中存储多个值(“small,large,xlarge,xxlarge”) - 谷歌关于数据库的正常形式...... – MilanG 2015-03-02 15:01:06
有一些奇怪的方式你concat字符串。尝试:'$ all_list。=“”;' – 2015-03-02 15:02:06