Php 在foreach()循环中合并/追加来自不同ID的值

Php 在foreach()循环中合并/追加来自不同ID的值,php,codeigniter,loops,foreach,Php,Codeigniter,Loops,Foreach,我不确定我是否有一个正确的标题,但我来了。我目前使用CodeIgniter开发应用程序。假设我有一个具有当前记录的数据库对象: ---------------------------------------------------------------- -- ID -- SurveyID -- UserID -- Value1 -- Value2 -- Marker -- --------------------------------------------------------

我不确定我是否有一个正确的标题,但我来了。我目前使用CodeIgniter开发应用程序。假设我有一个具有当前记录的数据库对象:

----------------------------------------------------------------
-- ID -- SurveyID  -- UserID  -- Value1  -- Value2  -- Marker --
----------------------------------------------------------------
--  1 --     1     --    1    --    5    --    3    --    A   --
--  2 --     1     --    1    --    5    --    3    --    B   --
--  3 --     1     --    1    --    5    --    1    --    C   --
--  4 --     1     --    1    --    5    --    3    --    D   --
--  5 --     1     --    1    --    5    --    3    --    E   --
--  6 --     2     --    2    --   10    --    7    --    A   --
--  7 --     2     --    2    --   10    --    7    --    B   --
--  8 --     2     --    2    --   10    --    7    --    C   --
--  9 --     2     --    2    --   10    --    7    --    D   --
-- 10 --     2     --    2    --   10    --    7    --    E   --
-- 11 --     2     --    3    --   12    --    17   --    A   --
-- 12 --     2     --    3    --   12    --    17   --    B   --
-- 13 --     2     --    3    --   12    --    17   --    C   --
-- 14 --     2     --    3    --   12    --    17   --    D   --
-- 15 --     2     --    3    --   12    --    17   --    E   --
----------------------------------------------------------------
我有一个从数据库生成表输出的代码:

$tableOutput = '
<table class="table table-bordered">
    <tr>
        <td>Survey ID = '.$user_data_list->SurveyID.'</td>
    </tr>
    <tr>
        <td>A</td>
        <td>B</td>
        <td>C</td>
        <td>D</td>
        <td>E</td>
        <td>A</td>
        <td>B</td>
        <td>C</td>
        <td>D</td>
    </tr>
';

foreach ($object as $user_data_list)
{
    $tableOutput .= '<tr>'; // Row opening
    $tableOutput .= '<td>'.$user_data_list->Value1.'</td>'; // Marker A value1
    $tableOutput .= '<td>'.$user_data_list->Value1.'</td>'; // Marker B value1
    $tableOutput .= '<td>'.$user_data_list->Value1.'</td>'; // Marker C value1
    $tableOutput .= '<td>'.$user_data_list->Value1.'</td>'; // Marker D value1
    $tableOutput .= '<td>'.$user_data_list->Value1.'</td>'; // Marker E value1

    $tableOutput .= '<td>'.$user_data_list->Value2.'</td>'; // Marker A value2
    $tableOutput .= '<td>'.$user_data_list->Value2.'</td>'; // Marker B value2
    $tableOutput .= '<td>'.$user_data_list->Value2.'</td>'; // Marker C value2
    $tableOutput .= '<td>'.$user_data_list->Value2.'</td>'; // Marker D value2
    $tableOutput .= '<td>'.$user_data_list->Value2.'</td>'; // Marker E value2
    $tableOutput .= '<tr>'; // Row closing
}

$tableOutput .= '</table>';
上表看起来不错,但我对调查ID 2有问题。输出必须在一行中,因为它是基于UserID 2和3的所有结果的结果。这是我的预期输出:

----------------------------------------------------
-- Survey ID = 1                                  --
----------------------------------------------------
-- A -- B -- C -- D -- E -- A -- B -- C -- D -- E --
----------------------------------------------------
-- 5 -- 5 -- 5 -- 5 -- 5 -- 3 -- 3 -- 1 -- 3 -- 3 --
----------------------------------------------------

----------------------------------------------------
-- Survey ID = 2                                  --
----------------------------------------------------
-- A -- B -- C -- D -- E -- A -- B -- C -- D -- E --
----------------------------------------------------
--22 --22 --22 --22 --22 --24 --24 --24 --24 --24 --
----------------------------------------------------
如何在foreach()中编码,以便生成预期的输出?我希望数据库设计没有问题

更新:>>以下是$object值。您将注意到$object值和上面的问题之间的差异。上面的问题是简化版。重要的列有:
survey\u id
user\u id
value1
value2
,以及
marker
。剩下的并不重要


谢谢

对于foreach循环的每次迭代,您都没有清除以前的迭代值。 $tableOutput.=''

将foreach更改为以下内容:

 foreach ($object as $user_data_list)
    {
        $tableRowOutput = '<tr>'; // Row opening
        $tableRowOutput .= '<td>'.$user_data_list->Value1.'</td>'; // Marker A value1
        $tableRowOutput .= '<td>'.$user_data_list->Value1.'</td>'; // Marker B value1
        $tableRowOutput .= '<td>'.$user_data_list->Value1.'</td>'; // Marker C value1
        $tableRowOutput .= '<td>'.$user_data_list->Value1.'</td>'; // Marker D value1
        $tableRowOutput .= '<td>'.$user_data_list->Value1.'</td>'; // Marker E value1

        $tableRowOutput .= '<td>'.$user_data_list->Value2.'</td>'; // Marker A value2
        $tableRowOutput .= '<td>'.$user_data_list->Value2.'</td>'; // Marker B value2
        $tableRowOutput .= '<td>'.$user_data_list->Value2.'</td>'; // Marker C value2
        $tableRowOutput .= '<td>'.$user_data_list->Value2.'</td>'; // Marker D value2
        $tableRowOutput .= '<td>'.$user_data_list->Value2.'</td>'; // Marker E value2
        $tableRowOutput .= '<tr>'; // Row closing

        $tableOutput .= $tableRowOutput;
    }
foreach($user\u data\u列表中的对象)
{
$tableRowOutput='';//行打开
$tableRowOutput.=''.$user_data_list->Value1'.';//标记一个Value1
$tableRowOutput.=''.$user_data_list->Value1'.';//标记B Value1
$tableRowOutput.=''.$user_data_list->Value1'.';//标记C Value1
$tableRowOutput.=''.$user_data_list->Value1'.';//标记D Value1
$tableRowOutput.=''.$user_data_list->Value1'.';//标记E Value1
$tableRowOutput.=''.$user_data_list->Value2'.';//标记一个Value2
$tableRowOutput.=''.$user_data_list->Value2'.';//标记B Value2
$tableRowOutput.=''.$user_data_list->Value2'.';//标记C Value2
$tableRowOutput.=''.$user_data_list->Value2'.';//标记D Value2
$tableRowOutput.=''.$user_data_list->Value2'.';//标记E Value2
$tableRowOutput.='';//行关闭
$tableOutput.=$tableRowOutput;
}
这样做怎么样。 是否为输出创建新函数

<?php
/*
PLEASE TRY BETTER SOLUTION
*/
for($SurveyID=1;$SurveyID<=2;$SurveyID++)
{
    $tableOutput = '
    <table class="table table-bordered">
        <tr>
            <td>Survey ID = '.$SurveyID.'</td>
        </tr>
        <tr>
            <td>A</td>
            <td>B</td>
            <td>C</td>
            <td>D</td>
            <td>E</td>
            <td>A</td>
            <td>B</td>
            <td>C</td>
            <td>D</td>
        </tr>
    ';
    echo $tableOutput;
    $s='<tr>';

    $aksara=array('','A','B','C','D','E'); 
    for($i1=1;$i1<=2;$i1++)
    {
        for($i2=1;$i2<count($aksara);$i2++)
        {
            $s.="<td>".$this->userdata_model
                     ->valueSurvei($SurveyID,$i1,$aksara[$i2])."</td>\n";
        }

    }

    $s.="</tr></table>";
    echo $s;
}

//==========================userdata_model.php======
function valueSurvei($survei, $pos, $marker)
{
    $field=$pos==1?'Value1':'Value2';
    $sql="select sum($field) s from table where SurveyID=$survei and Marker ='$marker'";
    $dt=$this->db->query($sql)->row_array();
    return $dt['s'];
}

谢谢@raj。从连续10个小时的节目开始休息后再试试。如果我遇到问题,我会回复。你能把($object)变量转储并附加到问题上吗?@Nouphal.M你好,我已经用$object值的链接更新了问题。我无法粘贴到这里,因为超过了帖子的最大字符数。
<?php
/*
PLEASE TRY BETTER SOLUTION
*/
for($SurveyID=1;$SurveyID<=2;$SurveyID++)
{
    $tableOutput = '
    <table class="table table-bordered">
        <tr>
            <td>Survey ID = '.$SurveyID.'</td>
        </tr>
        <tr>
            <td>A</td>
            <td>B</td>
            <td>C</td>
            <td>D</td>
            <td>E</td>
            <td>A</td>
            <td>B</td>
            <td>C</td>
            <td>D</td>
        </tr>
    ';
    echo $tableOutput;
    $s='<tr>';

    $aksara=array('','A','B','C','D','E'); 
    for($i1=1;$i1<=2;$i1++)
    {
        for($i2=1;$i2<count($aksara);$i2++)
        {
            $s.="<td>".$this->userdata_model
                     ->valueSurvei($SurveyID,$i1,$aksara[$i2])."</td>\n";
        }

    }

    $s.="</tr></table>";
    echo $s;
}

//==========================userdata_model.php======
function valueSurvei($survei, $pos, $marker)
{
    $field=$pos==1?'Value1':'Value2';
    $sql="select sum($field) s from table where SurveyID=$survei and Marker ='$marker'";
    $dt=$this->db->query($sql)->row_array();
    return $dt['s'];
}