2011-02-05 76 views
1

我使用下面的這個函數來處理從我的db中檢索的數組數據,然後將這些數據導出到Excel中。在導出到Excel之前將數據轉換爲表格格式

# feed the final items to our formatting function... 
$contents = get_excel_data($items); 

function get_excel_data($items){ 

    # set the variable 
    $output = null; 

    # check if the data is an items and is not empty 
    if (is_array($items) && !empty($items)) 
    { 
     # start the row at 0 
     $row = 0; 

     # loop the items 
     # "foreach(array_values($data) as $item)" is too complicated. "foreach($data as $item)" will suffice. 
     # foreach(array_values($items) as $item) 
     foreach($items as $item) 
     { 
      if (is_array($item) && !empty($item)) 
      { 
       if ($row == 0) 
       { 
        # write the column headers 
        $output = implode("\t",array_keys($item)); 
        $output .= "\n"; 
       } 
        # create a line of values for this row... 
        $output .= implode("\t",array_values($item)); 
        $output .= "\n"; 

        # increment the row so we don't create headers all over again 
        $row++; 
      } 
     } 
    } 

    # return the result 
    return $output; 
} 

它處理輸出像下面這樣,

cat_id cat_name cat_order cat_hide cat_important cat_created cat_updated 
1 Primary image 1 0 1 0000-00-00 00:00:00 2011-01-17 17:26:51 
2 Secondary image 2 0 1 0000-00-00 00:00:00 2011-01-17 17:27:01 
3 Tertiary image 3 0 1 0000-00-00 00:00:00 2010-10-08 20:03:56 
4 Quartary image 4 0 1 0000-00-00 00:00:00 2010-10-08 20:03:56 

但最好我想包裝在這樣的表中的輸出,

<table border="1"> 
<tr> 
<th>cat_id</th> 
<th>cat_name</th> 
<th>cat_order</th> 
<th>cat_hide</th> 
<th>cat_important</th> 
<th>cat_created</th>  
<th>cat_updated</th> 
</tr> 

<tr> 
<td>1</td> 
<td>Primary image</td> 
<td>1</td> 
<td>0</td> 
<td>1</td> 
<td>0000-00-00 00:00:00</td>  
<td>2011-01-17 17:26:51</td> 
</tr> 

<td>2</td> 
<td>Secondary image</td>  
<td>2</td> 
<td>0</td> 
<td>1</td> 
<td>0000-00-00 00:00:00</td>  
<td>2011-01-17 17:26:51</td> 
</tr> 
... 
</table> 

任何想法我應該加入到原始代碼輸出上面的表格?

我嘗試了以下版本的修改,但失敗了!

function get_excel_data($items){ 

    # set the variable 
    $output = null; 

    # check if the data is an items and is not empty 
    if (is_array($items) && !empty($items)) 
    { 
     # start the row at 0 
     $row = 0; 

     # loop the items 
     # "foreach(array_values($data) as $item)" is too complicated. "foreach($data as $item)" will suffice. 
     # foreach(array_values($items) as $item) 
     foreach($items as $key => $value) 
     { 

       if ($row == 0) 
       { 
        /* 
        # write the column headers 
        $output = implode("\t",array_keys($item)); 
        $output .= "\n"; 
        */ 

        $output = '<table border="1"><tr>'; 
        $output .= '<th>'.$key.'</th>'; 
        $output .= '</tr>'; 
       } 
        /* 
        # create a line of values for this row... 
        $output .= implode("\t",array_values($item)); 
        $output .= "\n"; 
        */ 

        $output .= '<tr>'; 
        $output .= '<td>'.$value.'</td>'; 

        $output .= '</tr>'; 


       if ($row == 0) 
       { 
        $output .= '</table>'; 
       } 

        # increment the row so we don't create headers all over again 
        $row++; 

     } 
    } 

    # return the result 
    return $output; 
} 

謝謝。

+1

爲什麼不創建一個真正的Excel文件,而不是試圖假裝製表符分隔文件或HTML文件是Excel文件? – 2011-02-05 16:09:10

+0

'爲什麼不創建一個真正的Excel文件' - 你的意思是使用Microsoft Excel創建Excel文件? – laukok 2011-02-05 16:14:55

回答

1

這是您的功能上未經測試的變體,可能會起作用。

# feed the final items to our formatting function... 
$contents = get_excel_data($items); 

function get_excel_data($items){ 

    # set the variable 
    $output = null; 

    # check if the data is an items and is not empty 
    if (is_array($items) && !empty($items)) 
    { 
     # start the row at 0 
     $row = 0; 

     $output = '<table border="1">' 

     # loop the items 
     # "foreach(array_values($data) as $item)" is too complicated. "foreach($data as $item)" will suffice. 
     # foreach(array_values($items) as $item) 
     foreach($items as $item) 
     { 
      if (is_array($item) && !empty($item)) 
      { 
       if ($row == 0) 
       { 
        $output .= '<tr>'; 
        foreach(array_keys($item) as $header) 
        { 
         $output .= '<th>'.$header.'</th>'; 
        } 
        $output .= '</tr>'; 
       } 

       $output .= '<tr>'; 
       foreach(array_values($item) as $cell) 
       { 
        $output .= '<td>'.$cell.'</td>'; 
       } 
       $output .= '</tr>'; 

       # increment the row so we only create headers once 
       $row++; 
      } 
     } 
     $output .= '</table>'; 
    } 

    # return the result 
    return $output; 
}