php
  • codeigniter
  • loops
  • foreach
  • 2014-01-20 3 views 0 likes 
    0

    올바른 제목이 있는지는 확실하지 않지만 여기에 있습니다. 현재 CodeIgniter로 어플리케이션을 개발 중입니다. 나는 현재 레코드와 데이터베이스 객체가 있다고 가정하자 :foreach() 루프 내의 다른 ID에서 값 병합/추가

    $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 -- 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 -- 
    ---------------------------------------------------------------- 
    

    을 나는 데이터베이스에서 테이블 출력을 생성하는 코드가

    ---------------------------------------------------- 
    -- 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 >> 다음은 $ 객체 값입니다. 위의 $ 객체 값과 질문의 차이를 알 수 있습니다. 위의 질문은 단순화 된 버전입니다. 중요한 열은 survey_id, user_id, value1, value2 및 입니다. 나머지는 중요하지 않습니다.

    감사합니다.

    +0

    var_dump ($ object)하고 질문에 추가 할 수 있습니다. –

    +0

    @ Nouphal.M 안녕하세요, $ object 값에 대한 링크가있는 질문이 업데이트되었습니다. 글의 최대 글자 수를 초과하므로 여기에 붙여 넣을 수 없습니다. – mokalovesoulmate

    답변

    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; 
        } 
    
    +0

    감사합니다. @raj. 길고 똑 바른 10 시간에서 휴식 시간 후에 시도하십시오 @ ___ @. 내가 문제가 있으면 다시 말 할 것이다. – mokalovesoulmate

    0

    이 시합은 다음과 같이 확인 방법에 대해 설명합니다. 출력에 새 함수를 만드시겠습니까?

    <?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']; 
    } 
    
    관련 문제