while循环内部的循环只返回1行

时间:2016-02-11 22:20:31

标签: php sql-server foreach while-loop

我正在尝试使用php和ajax输出表格。现在我的函数从1个表中获取数据,然后迭代该表的行以从不同的表中获取行,然后形成一个表。为了实现这一点,我将while循环放在foreach循环中,来自第一个表的数据是在数组中,所以我使用forean迭代数组,然后放入while循环。 这导致仅一行。需要帮助

public function GetReportData()
{
   $status_list = $this->GetStatusList();

    foreach ($status_list as $status)
    {
        $staus_orignal = $status->orignal_status;
        $status_site =  $status->site_status;
        try
        {
        $db = $this->GetDBHandle();
        $start_date = '05/01/2015';
        $end_date = '05/02/2015';
        $affiliate_id = 0;

        $output_string = '';
        $output_string .=  '<table class="tg">
          <tr>
            <th class="tg-031e"><span style="color:#fff;">Disposition Type</span></th>
            <th class="tg-yw4l"><span style="color:#fff;">Lead Count</span></th>
            <th class="tg-yw4l"><span style="color:#fff;">Revenue</span></th>
          </tr>';

        $query = "exec affiliate_portal_report_data_select $staus_orignal, $affiliate_id,'". $start_date."','". $end_date."'";
        $result = odbc_exec ( $db, $query );

        if ( !$result )
        {
             throw new Exception ( 'Error from  ' . $query . ': ' . odbc_errormsg() );
        }

        else
        {
            while ( odbc_fetch_row ( $result ) )
            {

               $lead_count = odbc_result( $result, 'leadcount' );
               $revenue = odbc_result( $result, 'revenue' );
               $output_string .= '<tr>
                <td class="tg-yw4l">'.$status_site.'</td>
                <td class="tg-yw4l">'.$lead_count.'</td>
                <td class="tg-yw4l dollar">'.$revenue.'</td>
              </tr>';
            }

        }
        }

    catch ( Exception $e )        
        {
        $error_status = $e->getMessage();
        print $error_status;
        }

    }
    $output_string .=  '</table>';
    return $output_string;
}

2 个答案:

答案 0 :(得分:1)

第16行有一个$output_string = '';。你在foreach循环的每次迭代中重新初始化你的输出,所以你只会得到最后一行。

我不完全确定你的问题,但如果这段代码应该生成一个表,那么你可以完全摆脱$output_string = '';,把它放在:

$output_string =  '<table class="tg">
<tr>
    <th class="tg-031e"><span style="color:#fff;">Disposition Type</span></th>
    <th class="tg-yw4l"><span style="color:#fff;">Lead Count</span></th>
    <th class="tg-yw4l"><span style="color:#fff;">Revenue</span></th>
</tr>';
在 foreach循环之前

,并保留此:

$output_string .=  '</table>';
foreach循环之后

(就像它已经存在的那样)。

但是如果您的代码应该生成多个表,那么您仍然需要摆脱$output_string = '';,并且可以将<th>部分保留在原来的位置,但你需要在foreach循环中移动$output_string .= '</table>'; ,否则最终会得到一堆未封闭的表格标签。

答案 1 :(得分:0)

正如@ Don&#t; tPanic在评论中所说,你必须在循环之外初始化你的$output_string变量。

与实际情况一样,您为每一行重新创建一个空字符串 如果通过循环另一个来构建数组或字符串,请记住在外部进行变量声明,并在循环内部进行增量。

将您的代码更改为:

$output_string = '';

foreach ($status_list as $status) {
    // ...
    $output_string .= 'yourstring';
    // ...
}