Php foreach循环不断地将上一个结果添加到每个表行的下一个结果中

Php foreach循环不断地将上一个结果添加到每个表行的下一个结果中,php,mysql,arrays,Php,Mysql,Arrays,我试图创建一个表格,显示培训计划的日期、计划本身以及可以参加培训的小组成员。 前两个没有问题,但谁能参加才是问题所在。 与会者作为字符串存储在数据库中,并将其分解为数组,但当我使用foreach循环显示数组时,它会将上一行添加到下一行 我的密码是: $sql_group_name = mysqli_query($db_conx,"SELECT groupName,accepted FROM maingroup"); while ($row = mysqli_fetch_array

我试图创建一个表格,显示培训计划的日期、计划本身以及可以参加培训的小组成员。 前两个没有问题,但谁能参加才是问题所在。 与会者作为字符串存储在数据库中,并将其分解为数组,但当我使用foreach循环显示数组时,它会将上一行添加到下一行

我的密码是:

    $sql_group_name = mysqli_query($db_conx,"SELECT groupName,accepted FROM maingroup");
    while ($row = mysqli_fetch_array($sql_group_name)){
$accepted= $row["accepted"];
$groupName = $row["groupName"];
$accept_array = explode(",", $accepted);
if (in_array($u,$accept_array)){
    $sql = "SELECT * FROM training WHERE groupName='$groupName' ORDER BY sessDate ASC";
    $training_query = mysqli_query($db_conx, $sql);

    while ($row = mysqli_fetch_array($training_query, MYSQLI_ASSOC)) {
        $id = $row["id"];
        $date = $row["sessDate"];
        $session = htmlspecialchars_decode(stripslashes($row['plan']), ENT_QUOTES);
        $groupName = $row["groupName"];
        $attending = $row["attending"];
        $attend_array = explode(",",$attending);
        foreach($attend_array as $value){
            $attendList .=  "" .$value. "<br/>";
        } 

        if (in_array($u,$attend_array)){
            $attendBtn = '<form name="sessUnAttend" id="sessUnAttend" method="post">
                                <input type="submit" value="Unattend">
                                <input type="hidden" name="id" id="id" value="' .$id. '">
                                <input type="hidden" name="unattend" id="unattend">
                                </form>';

        } else { $attendBtn = '<form name="sessAttend" id="sessAttend" method="post">
                                <input type="submit" value="Attend">
                                <input type="hidden" name="id" id="id" value="' .$id. '">
                                <input type="hidden" name="attend" id="attend">
                                </form>';

    }

        $sessTable .= '<tr>
                        <td>' .$date. '</td>
                        <td>' .$session. '</td>     
                        <td>' .$groupName. '</td>
                        <td>' .$attendList. '</td>
                        <td>' .$attendBtn. '</td>
                        </tr>';
    }
}
    }
$sql\u group\u name=mysqli\u query($db\u conx,“选择groupName,从maingroup接受”);
while($row=mysqli\u fetch\u数组($sql\u group\u name)){
$accepted=$row[“accepted”];
$groupName=$row[“groupName”];
$accept_数组=分解(“,”,$accepted);
if(在数组中($u,$accept\u数组)){
$sql=“从培训中选择*,其中groupName='$groupName'按sessDate ASC排序”;
$training\u query=mysqli\u query($db\u conx,$sql);
while($row=mysqli\u fetch\u数组($training\u query,mysqli\u ASSOC)){
$id=$row[“id”];
$date=$row[“sessDate”];
$session=htmlspecialchars\u decode(带斜杠($row['plan']),ENT\u引号);
$groupName=$row[“groupName”];
$attenting=$row[“attenting”];
$attenting\u数组=分解(“,”,$attenting);
foreach($value形式的数组){
$attendList.=''.$value.
; } if(在数组中($u,$attendent\u数组)){ $attendBtn= '; }else{$attendBtn='1 '; } $sessTable.=' “.$日期。” “.$session” “.$groupName。” “.$attendList。” “.$attendBtn。” '; } } }
我得到的结果是:

日期|计划|参加

4.4.16 |一些计划|我

5.4.16 |一些计划|我,我

6.4.16 |一些计划|我,我

很明显,“我”只能参加一次。它会不断重复我,直到有人说他们可以参加,然后加上他们的名字并重复,直到有人说他们可以参加等等


我已经读到while循环应该是
mysqli\u fetch\u assoc
而不是
mysqli\u fetch\u array
,但这似乎把其他所有事情都搞糟了

尝试以下操作以取消设置id:

unset($accepted);

@MarkBaker的评论是在朋友的帮助下完成的

我所要做的就是重置
$attendList
变量

     $sessTable .= '<tr>
                    <td>' .$date. '</td>
                    <td>' .$session. '</td>     
                    <td>' .$groupName. '</td>
                    <td>' .$attendList. '</td>
                    <td>' .$attendBtn. '</td>
                    </tr>';
                    $attendList = ''; 
$sestable.='
“.$日期。”
“.$session”
“.$groupName。”
“.$attendList。”
“.$attendBtn。”
';
$attendList='';
发生的事情是,变量是从上一个循环中设置的,然后它一直保持不变,直到有更多的变量被添加到它


现在的情况是,每次循环完成时,它都会重置变量,以便新id从头开始。

重置
$attendList
'
当您更改日期/计划时,您的代码太乱了。首先,
$u
从何而来?让我们假设,在这个代码之外。但问题是,您在第一次查询中循环
$row
,而内部循环会覆盖
$row
。请先修复它。@lolka_bolka-是的,$u变量在页面中的任何地方都已建立,很抱歉,应该这样说,但我不想发布与此问题无关的整页代码。我曾尝试将内部while循环更改为$row1,但它似乎对结果没有任何影响。这就是你的意思吗?@MarkBaker你如何将
$attendList
设置为
'
。如果我把它放在foreach循环中或foreach循环外,它会将所有内容发送到
'
,因为这是变量的最后一次调用。还是我没听懂?@MarkBaker谢谢你的评论,我把它展示给了一位朋友,他澄清了你的意思,现在效果很好。我试着把你的建议放在foreach循环的
$attendList.=''.$value下。“
但它没有改变任何东西。这是你的意思还是我应该把它放在别的地方?