Php 逗号分隔的值不与“foreach”一起显示。只有一个出现了。为什么?

Php 逗号分隔的值不与“foreach”一起显示。只有一个出现了。为什么?,php,Php,此代码不起作用。我正在尝试获取功能名称的列表。类别12中的产品都指定了5个功能,但打印时仅显示1个功能 奇怪的是,当我在结束括号之前的第二个查询之后立即回显$FeatureName时,它回显了5项。但是当我调用$HTML时,我只得到一个 第一个查询中的功能如下所示: 23,41,68,71,80 我的代码如下: $HTML="<table><tr>"; $i=0; $count=0; $query="SELECT features FROM products WHER

此代码不起作用。我正在尝试获取功能名称的列表。类别12中的产品都指定了5个功能,但打印时仅显示1个功能

奇怪的是,当我在结束括号之前的第二个查询之后立即回显$FeatureName时,它回显了5项。但是当我调用$HTML时,我只得到一个

第一个查询中的功能如下所示:

23,41,68,71,80
我的代码如下:

$HTML="<table><tr>";

$i=0;
$count=0;
$query="SELECT features FROM products WHERE category='12'";
$res=mysql_query($query);
while(list($features)=mysql_fetch_array($res))
  {
   $i++;
   $count++;

$features = explode(',' , $features);

foreach($features as $x =>$key) {
$x >0;
       $query="SELECT FeatureName FROM products_features WHERE id='$key'";
       list($FeatureName)=mysql_fetch_array(mysql_query($query)); 
}

$HTML.="<td> $FeatureName </td>";

      if(($i%1)==0)
         $HTML.="</tr><tr>";
  }
$HTML.="</tr></table>";

我哪里做错了?谢谢您的帮助。

您将$HTML附加到内部循环之外。

您这样做了

$HTML.="<td> $FeatureName </td>";

是的,您已将$HTML放在每个循环的外侧

下面是为您更正的代码剪报

$HTML="<table><tr>";

$i=0;
$count=0;
$query="SELECT features FROM products WHERE category='12'";
$res=mysql_query($query);
while(list($features)=mysql_fetch_array($res))
  {

$features = explode(',' , $features);

foreach($features as $x =>$key) {

   $i++;
   $count++;

$x >0;
       $query="SELECT FeatureName FROM products_features WHERE id='$key'";
       list($FeatureName)=mysql_fetch_array(mysql_query($query)); 
$HTML.="<td> $FeatureName </td>";

      if(($i%1)==0)
         $HTML.="</tr><tr>";
}

  }
$HTML.="</tr></table>";

不管这段代码有什么问题,都应该规范化数据库表。如果您这样做了,您将能够将这个混乱简化为一个查询,在PHP端使用简单的逻辑。更容易维护,更通用,更容易验证正确性。谢谢Tim。我是一个初学者,将对此进行研究。我甚至不知道规范化数据库需要什么。一个问题就好了。再次感谢。基本上,在这种情况下,它意味着不在单个数据库列中存储多个值。如果您在其他地方需要逗号分隔的结果,您可以通过组连接将其返回。您需要一个product features表,该表每行存储一个product/feature id对。通过执行表联接,可以获得真正的结果。此外,我觉得有义务提及,就像我经常在这样的问题上所做的那样:mysql_uu函数已被弃用;改用mysqli接口或PDO。这很有意义。我不喜欢现在这样做,真的很麻烦。我将研究并希望实施你的建议编辑:是的,功能在它们自己的表中,每行一个。顺便说一句,不要让它吓到你,SQL查询将更复杂一些。让数据库完成它的设计目的。谢谢。我担心放在那里,因为它已经是一个循环了。但它似乎奏效了。再次感谢。@user3141201不客气。如果你觉得我的答案有帮助,记得用左边的粗体字来表示接受。是的,这就是问题所在。现在好像有用了。谢谢你,谢谢你,杰。你已经为我回答了前面的问题。我真的很感激完整的编辑。每个人都很乐于助人。
$HTML="<table><tr>";

$i=0;
$count=0;
$query="SELECT features FROM products WHERE category='12'";
$res=mysql_query($query);
while(list($features)=mysql_fetch_array($res))
  {

$features = explode(',' , $features);

foreach($features as $x =>$key) {

   $i++;
   $count++;

$x >0;
       $query="SELECT FeatureName FROM products_features WHERE id='$key'";
       list($FeatureName)=mysql_fetch_array(mysql_query($query)); 
$HTML.="<td> $FeatureName </td>";

      if(($i%1)==0)
         $HTML.="</tr><tr>";
}

  }
$HTML.="</tr></table>";