2016-04-06 77 views
1

我想將數據保存到csv文件。PHP csv報告添加列名

我已經可以做到這一點,但我也想添加像列名,使該報告的可讀性,但是這就是我奮力:

我迄今爲止代碼:

<?php 
namespace Test\UserBundle\ReportsBuilder; 

class RegistrationReport { 

    public function buildRegReport($data) 
    { 
     $cavPath = '../src/Test/UserBundle/Resources/reports/test_report_'.date('Y-m-d H:i:s').'.csv'; 
     $csvh = fopen($cavPath, 'w+'); 

      $row = 'rowid'.",".'emailaddress'.",".'firstname'.",".'surname'.",".'contact_number'; 

     foreach ($data as $value) 
     { 
      $reportRows = array 
      (
       $value['rowid'], 
       $value['emailaddress'], 
       $value['firstname'], 
       $value['surname'], 
       $value['contact_number'], 
      ); 
       fputcsv($csvh, $reportRows); 
     } 
     fclose($csvh); 
    } 
} 

所以傳入該方法的$ data參數包含數組數組。正在考慮創建一個字符串列名然後一些如何將其添加到循環,但我可能是錯誤的這一個任何建議如何我可以分配列我的報告名稱。

問候

回答

2

嗯,我真的不明白..

但要回答您的問題,將列名放入您的CSV文件實際上非常簡單。你唯一需要做的就是在第一行添加列名(逗號分隔)。這與添加一行數據完全相同。

例子:

fputcsv($csvh, array_keys($data[0])); 
    foreach ($data as $value) { 
     fputcsv($csvh, $value); 
    } 

希望這回答了你的問題。

+0

哇大聲笑我跟着exacly你寫了什麼,從內部刪除數組foreach,並在foreach之前添加fputcsv。你能否解釋一下,我發現它有點有線:P爲什麼使用fputcsv兩次。 – John

+0

fputcsv格式並將行插入爲CSV。你的foreach循環插入數組$ data中的所有數據。如果您將該行放入循環中,則會多次添加鍵。 CSV只包含逗號分隔的字符串。通過在foreach循環之前添加鍵,可以將數組鍵作爲第一行插入到文件中。這意味着您的文件將如下所示: – Boratzan

+0

key1,key2,key3(這是文件的第一行)。之後,你的循環開始工作,並將輸出以下內容: value1,value2,value3。 – Boratzan

0

嘗試:

<?php 
namespace Test\UserBundle\ReportsBuilder; 

class RegistrationReport { 

    public function buildRegReport($data) 
    { 
     $cavPath = '../src/Test/UserBundle/Resources/reports/test_report_'.date('Y-m-d H:i:s').'.csv'; 
     $csvh = fopen($cavPath, 'w+'); 

     $row = array('rowid','emailaddress','firstname','surname','contact_number'); 
     fputcsv($csvh, $row); 

     foreach ($data as $value) 
     { 
      $reportRows = array 
      (
       $value['rowid'], 
       $value['emailaddress'], 
       $value['firstname'], 
       $value['surname'], 
       $value['contact_number'], 
      ); 
       fputcsv($csvh, $reportRows); 
     } 
     fclose($csvh); 
    } 
} 
+0

'fputcsv()參數2必須是數組,implode返回字符串' – John

+0

默認情況下,不需要使用逗號作爲分隔符。參考,請找到這個鏈接:http://php.net/manual/en/function.fputcsv.php –

+0

是的,你是對的我已經改變它;) –

0

您需要添加聽到csv文件還喜歡:

fputcsv($csvh, $row); before the foreach() 
1

以CSV添加你的頭,你可以用同樣的方法添加數據。

所以,你必須改變這一行

$row = 'rowid'.",".'emailaddress'.",".'firstname'.",".'surname'.",".'contact_number'; 

:爲何您創建一個數組循環中的數組,包括相同的字段

fputcsv($csvh, array('rowid', 'emailaddress', 'firstname', 'surname', 'contact_number'));