PHP:PHP变量中的foreach循环?

时间:2015-03-02 14:55:55

标签: php mysql

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

存储名为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>";

所以我想把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

所以基本上,它会从第一个项目中获取尺寸列,并且会在其他项目的选择选项中重复它,就像上面的例子一样。

5 个答案:

答案 0 :(得分:2)

由于您为每次迭代生成单独的<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);

答案 1 :(得分:0)

根据您发布的内容,您似乎在while循环的每次迭代中重新生成$ all_list。

因此,如果你在while循环之外回显$ all_list,它将只有最后一次迭代可用 - 所有其他迭代都在while循环过程中被覆盖。

答案 2 :(得分:0)

也许我错了。但是很简单:

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

答案 3 :(得分:0)

在&#39; $ all_list。=&#34;&#39;之前关闭while循环的开口括号。 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>";

`

可能会有效

答案 4 :(得分:0)

我明白了。感谢Justinas的回答。我意识到我必须把我的php变量放在while循环中。

所以我所要做的就是将$sizesOption =array();置于我的while循环中,现在一切正常。

P.S。我没有对上面的代码进行任何其他更改。