我不确定我是否有正确的头衔,但在这里我走了。我目前使用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>';
将生成:
----------------------------------------------------
-- 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 --
----------------------------------------------------
--10 --10 --10 --10 --10 -- 7 -- 7 -- 7 -- 7 -- 7 --
----------------------------------------------------
--12 --12 --12 --12 --12 --17 --17 --17 --17 --17 --
----------------------------------------------------
上面的表格看起来很好,但我对Survey 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()内部编码,以便我可以获得预期的输出?我希望数据库设计没有任何问题。
更新:http://pastebin.com/ZYyJD6fA&gt;&gt;这是$ object值。你会注意到$ object值和上面的问题之间的区别。上面的问题是简化版。重要的列包括:survey_id
,user_id
,value1
,value2
和marker
。其余的并不重要。
谢谢!
答案 0 :(得分:0)
对于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;
}
答案 1 :(得分:0)
bout如何做到这一点。 为输出创建新函数?
<?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'];
}