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