【问题标题】:Merging/append values from different ID inside foreach() loop在 foreach() 循环中合并/附加来自不同 ID 的值
【发布时间】:2014-01-20 10:59:22
【问题描述】:

我不确定我的标题是否正确,但我来了。我目前使用 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 --
----------------------------------------------------

上面的表格看起来不错,但调查 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 >> 这是 $object 值。您会注意到 $object 值和上面的问题之间的区别。上面的问题是简化版。重要的列是:survey_iduser_idvalue1value2marker。其余的都不重要。

谢谢!

【问题讨论】:

  • 你可以 var_dump($object) 并将其附加到问题中。
  • @Nouphal.M 你好,我已经用 $object 值的链接更新了问题。我无法在此处粘贴,因为超过了帖子的最大字符数。

标签: php codeigniter loops foreach


【解决方案1】:

对于 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;
    }

【讨论】:

  • 谢谢@raj。将在连续 10 小时的长时间编程休息后尝试@___@。如果我有麻烦会回复。
【解决方案2】:

怎么弄成这样。 为输出创建新函数?

<?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'];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 2020-01-25
    • 2018-05-13
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多